{
 "firmware": "fm1-chord",
 "slug": "chord",
 "author": "math0ne and fm1-chord contributors; based on Felucca by Leo Kuroshita (Hügelton Instruments)",
 "repo": "https://github.com/math0ne/fm1-chord",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v0.3",
 "mapped_commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
 "release_date": "2026-10-09",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 3 (2026-10-17). No device testing.",
 "version_note": "The community hub marks v0.3 as beta; this map describes the release, before the later SDK port.",
 "turns_it_into": "A chord instrument with a strumplate, scale notes, drums, looping and chord games.",
 "docs": [
  {
   "title": "README",
   "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/README.md",
   "read_at": "v0.3"
  },
  {
   "title": "Design notes and specifications",
   "url": "https://github.com/math0ne/fm1-chord/tree/377235d9f39a362e673f8fd60a26f0b1748218e7/spec/docs",
   "read_at": "v0.3",
   "note": "Design intent only; the release source takes precedence."
  }
 ],
 "install": {
  "official": "https://github.com/math0ne/fm1-chord/releases/tag/v0.3",
  "hub": "https://thefirmwarehub.com/"
 },
 "part_id_notes": "The SEL button is called SCL in this firmware; the panel encoders have no press action. The chord_ui mode means every page in the chord interface, excluding the hidden synth interface; play-mode key actions still apply while its menus are open. Row modes narrow a menu to the selected row. Home-mode SELECT and OCT actions apply only with the home screen visible. LED entries use button part ids; PLAY green is identified separately. Jack press entries mean plugging in or using the named connection.",
 "modes": [
  {
   "id": "chord_ui",
   "name": "Chord interface",
   "how_to_get_there": "Starts here; from the synth interface hold HOME and press SAVE.",
   "what_it_is": "Common controls across the chord pages; the selected play mode keeps the keys.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "689-708",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L689-L708"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_input.c",
     "lines": "691-694",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L691-L694"
    }
   ]
  },
  {
   "id": "home",
   "name": "Chord home screen",
   "how_to_get_there": "Release HOME after a short press.",
   "what_it_is": "Shows the selected play mode, chord or notes, sound, effects and looper state.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "717-720",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L717-L720"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "1335-1442",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1335-L1442"
    }
   ]
  },
  {
   "id": "key_menu",
   "name": "KEY menu",
   "how_to_get_there": "Press SEL.",
   "what_it_is": "Key, scale, layout, chord modifiers, bass and voicing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "721-732",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L721-L732"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "825-859",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L859"
    }
   ]
  },
  {
   "id": "sound_menu",
   "name": "SOUND menu",
   "how_to_get_there": "Press FX or GLO.",
   "what_it_is": "Sound, envelope, effects, speaker and MIDI input.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "721-732",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L721-L732"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "825-859",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L859"
    }
   ]
  },
  {
   "id": "mode_menu",
   "name": "MODE menu",
   "how_to_get_there": "Press EDIT.",
   "what_it_is": "Play mode, tempo, sequence, drums and game options.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "721-732",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L721-L732"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "825-859",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L859"
    }
   ]
  },
  {
   "id": "presets",
   "name": "PRESETS menu",
   "how_to_get_there": "Press SAVE.",
   "what_it_is": "P1/A, P2/B, P3/C and P4/D share saved music with the synth PROJECT slots; saving here asks no overwrite question and can damage the next preset’s chord settings.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "721-732",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L721-L732"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "825-859",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L859"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "311-316",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L311-L316"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/project.c",
     "lines": "694-704",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L694-L704"
    }
   ]
  },
  {
   "id": "looper",
   "name": "LOOPER menu",
   "how_to_get_there": "Press SEQ.",
   "what_it_is": "Four event layers, loop length, metronome and clearing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "721-732",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L721-L732"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "825-859",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L859"
    }
   ]
  },
  {
   "id": "env_list",
   "name": "Envelope Presets",
   "how_to_get_there": "Press ENV.",
   "what_it_is": "A list of 7 envelope presets, applied as the choice moves.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "618-655",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L618-L655"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "733-747",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L733-L747"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-796",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L796"
    }
   ]
  },
  {
   "id": "lfo_list",
   "name": "Vibrato Choices",
   "how_to_get_there": "Press LFO.",
   "what_it_is": "A list of 4 vibrato choices, applied as the choice moves.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "618-655",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L618-L655"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "733-747",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L733-L747"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-796",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L796"
    }
   ]
  },
  {
   "id": "sound_list",
   "name": "Sounds",
   "how_to_get_there": "Turn PRESETS.",
   "what_it_is": "A list of 38 sounds, applied as the choice moves.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "618-655",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L618-L655"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "733-747",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L733-L747"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-796",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L796"
    }
   ]
  },
  {
   "id": "mode_list",
   "name": "Play Modes",
   "how_to_get_there": "Turn ALGORITHM.",
   "what_it_is": "A list of 12 play modes, applied as the choice moves.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "618-655",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L618-L655"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "733-747",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L733-L747"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-796",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L796"
    }
   ]
  },
  {
   "id": "key_menu_key",
   "name": "KEY > KEY",
   "how_to_get_there": "Open KEY and turn SELECT to KEY.",
   "what_it_is": "The KEY row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "494",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L494"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_octave",
   "name": "KEY > OCTAVE",
   "how_to_get_there": "Open KEY and turn SELECT to OCTAVE.",
   "what_it_is": "The OCTAVE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "495",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L495"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_scale",
   "name": "KEY > SCALE",
   "how_to_get_there": "Open KEY and turn SELECT to SCALE.",
   "what_it_is": "The SCALE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "496",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L496"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_layout",
   "name": "KEY > LAYOUT",
   "how_to_get_there": "Open KEY and turn SELECT to LAYOUT.",
   "what_it_is": "The LAYOUT row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "497",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L497"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_joystick",
   "name": "KEY > JOYSTICK",
   "how_to_get_there": "Open KEY and turn SELECT to JOYSTICK.",
   "what_it_is": "The JOYSTICK row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "498",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L498"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_bass",
   "name": "KEY > BASS",
   "how_to_get_there": "Open KEY and turn SELECT to BASS.",
   "what_it_is": "The BASS row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "499",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L499"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_voices",
   "name": "KEY > VOICES",
   "how_to_get_there": "Open KEY and turn SELECT to VOICES.",
   "what_it_is": "The VOICES row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "500",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L500"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_voice_lead",
   "name": "KEY > VOICE LEAD",
   "how_to_get_there": "Open KEY and turn SELECT to VOICE LEAD.",
   "what_it_is": "The VOICE LEAD row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "501",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L501"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "key_menu_random",
   "name": "KEY > RANDOMIZE ALL",
   "how_to_get_there": "Open KEY and turn SELECT to RANDOMIZE ALL.",
   "what_it_is": "The RANDOMIZE ALL row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "502",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L502"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_sound",
   "name": "SOUND > SOUND",
   "how_to_get_there": "Open SOUND and turn SELECT to SOUND.",
   "what_it_is": "The SOUND row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "508",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L508"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_envelope",
   "name": "SOUND > ENVELOPE",
   "how_to_get_there": "Open SOUND and turn SELECT to ENVELOPE.",
   "what_it_is": "The ENVELOPE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "509",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L509"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_attack",
   "name": "SOUND > ATTACK",
   "how_to_get_there": "Open SOUND and turn SELECT to ATTACK.",
   "what_it_is": "The ATTACK row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "510",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L510"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_release",
   "name": "SOUND > RELEASE",
   "how_to_get_there": "Open SOUND and turn SELECT to RELEASE.",
   "what_it_is": "The RELEASE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "511",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L511"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_filter",
   "name": "SOUND > FILTER WHEEL",
   "how_to_get_there": "Open SOUND and turn SELECT to FILTER WHEEL.",
   "what_it_is": "The FILTER WHEEL row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "512",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L512"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_cutoff",
   "name": "SOUND > CUTOFF",
   "how_to_get_there": "Open SOUND and turn SELECT to CUTOFF.",
   "what_it_is": "The CUTOFF row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "513",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L513"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_resonance",
   "name": "SOUND > RESONANCE",
   "how_to_get_there": "Open SOUND and turn SELECT to RESONANCE.",
   "what_it_is": "The RESONANCE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "514",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L514"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_highpass",
   "name": "SOUND > HI-PASS",
   "how_to_get_there": "Open SOUND and turn SELECT to HI-PASS.",
   "what_it_is": "The HI-PASS row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "515",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L515"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_reverb",
   "name": "SOUND > REVERB",
   "how_to_get_there": "Open SOUND and turn SELECT to REVERB.",
   "what_it_is": "The REVERB row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "516",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L516"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_delay",
   "name": "SOUND > DELAY",
   "how_to_get_there": "Open SOUND and turn SELECT to DELAY.",
   "what_it_is": "The DELAY row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "517",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L517"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_chorus",
   "name": "SOUND > CHORUS",
   "how_to_get_there": "Open SOUND and turn SELECT to CHORUS.",
   "what_it_is": "The CHORUS row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "518",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L518"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_flanger",
   "name": "SOUND > FLANGER",
   "how_to_get_there": "Open SOUND and turn SELECT to FLANGER.",
   "what_it_is": "The FLANGER row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "519",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L519"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_tremolo",
   "name": "SOUND > TREMOLO",
   "how_to_get_there": "Open SOUND and turn SELECT to TREMOLO.",
   "what_it_is": "The TREMOLO row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "520",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L520"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_lfo",
   "name": "SOUND > LFO",
   "how_to_get_there": "Open SOUND and turn SELECT to LFO.",
   "what_it_is": "The LFO row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "521",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L521"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_glide",
   "name": "SOUND > GLIDE",
   "how_to_get_there": "Open SOUND and turn SELECT to GLIDE.",
   "what_it_is": "The GLIDE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "522",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L522"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_drive",
   "name": "SOUND > DRIVE",
   "how_to_get_there": "Open SOUND and turn SELECT to DRIVE.",
   "what_it_is": "The DRIVE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "523",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L523"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_tape",
   "name": "SOUND > TAPE",
   "how_to_get_there": "Open SOUND and turn SELECT to TAPE.",
   "what_it_is": "The TAPE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "524",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L524"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_stereo",
   "name": "SOUND > STEREO",
   "how_to_get_there": "Open SOUND and turn SELECT to STEREO.",
   "what_it_is": "The STEREO row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "525",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L525"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_speaker",
   "name": "SOUND > SPEAKER",
   "how_to_get_there": "Open SOUND and turn SELECT to SPEAKER.",
   "what_it_is": "The SPEAKER row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "526",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L526"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_output",
   "name": "SOUND > OUT LEVEL",
   "how_to_get_there": "Open SOUND and turn SELECT to OUT LEVEL.",
   "what_it_is": "The OUT LEVEL row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "527",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L527"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_midi_in",
   "name": "SOUND > MIDI IN",
   "how_to_get_there": "Open SOUND and turn SELECT to MIDI IN.",
   "what_it_is": "The MIDI IN row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "528",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L528"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "sound_menu_random",
   "name": "SOUND > RANDOMIZE SOUND",
   "how_to_get_there": "Open SOUND and turn SELECT to RANDOMIZE SOUND.",
   "what_it_is": "The RANDOMIZE SOUND row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "529",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L529"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_mode",
   "name": "MODE > MODE",
   "how_to_get_there": "Open MODE and turn SELECT to MODE.",
   "what_it_is": "The MODE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "534",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L534"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_tempo",
   "name": "MODE > TEMPO",
   "how_to_get_there": "Open MODE and turn SELECT to TEMPO.",
   "what_it_is": "The TEMPO row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "535",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L535"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_strum",
   "name": "MODE > STRUM SPEED",
   "how_to_get_there": "Open MODE and turn SELECT to STRUM SPEED.",
   "what_it_is": "The STRUM SPEED row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "536",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L536"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_arp_pattern",
   "name": "MODE > ARP PATTERN",
   "how_to_get_there": "Open MODE and turn SELECT to ARP PATTERN.",
   "what_it_is": "The ARP PATTERN row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "537",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L537"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_arp_rate",
   "name": "MODE > ARP RATE",
   "how_to_get_there": "Open MODE and turn SELECT to ARP RATE.",
   "what_it_is": "The ARP RATE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "538",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L538"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_arp_layer",
   "name": "MODE > ARP LAYER",
   "how_to_get_there": "Open MODE and turn SELECT to ARP LAYER.",
   "what_it_is": "The ARP LAYER row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "539",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L539"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_seq_length",
   "name": "MODE > SEQ LENGTH",
   "how_to_get_there": "Open MODE and turn SELECT to SEQ LENGTH.",
   "what_it_is": "The SEQ LENGTH row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "540",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L540"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_drum_kit",
   "name": "MODE > DRUM KIT",
   "how_to_get_there": "Open MODE and turn SELECT to DRUM KIT.",
   "what_it_is": "The DRUM KIT row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "541",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L541"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_loop_style",
   "name": "MODE > LOOP STYLE",
   "how_to_get_there": "Open MODE and turn SELECT to LOOP STYLE.",
   "what_it_is": "The LOOP STYLE row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "542",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L542"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_loop_variation",
   "name": "MODE > LOOP VARIATION",
   "how_to_get_there": "Open MODE and turn SELECT to LOOP VARIATION.",
   "what_it_is": "The LOOP VARIATION row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "543",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L543"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_hiro_song",
   "name": "MODE > HIRO SONG",
   "how_to_get_there": "Open MODE and turn SELECT to HIRO SONG.",
   "what_it_is": "The HIRO SONG row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "544",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L544"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_difficulty",
   "name": "MODE > DIFFICULTY",
   "how_to_get_there": "Open MODE and turn SELECT to DIFFICULTY.",
   "what_it_is": "The DIFFICULTY row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "545",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L545"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_speed",
   "name": "MODE > PRACTICE SPEED",
   "how_to_get_there": "Open MODE and turn SELECT to PRACTICE SPEED.",
   "what_it_is": "The PRACTICE SPEED row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "546",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L546"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_ear_level",
   "name": "MODE > EAR LEVEL",
   "how_to_get_there": "Open MODE and turn SELECT to EAR LEVEL.",
   "what_it_is": "The EAR LEVEL row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "547",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L547"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "mode_menu_random",
   "name": "MODE > RANDOMIZE PATTERN",
   "how_to_get_there": "Open MODE and turn SELECT to RANDOMIZE PATTERN.",
   "what_it_is": "The RANDOMIZE PATTERN row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "548",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L548"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "57-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L57-L76"
    }
   ]
  },
  {
   "id": "preset_1",
   "name": "PRESETS > P1",
   "how_to_get_there": "Press SAVE and turn SELECT to P1.",
   "what_it_is": "P1 shares its saved music with synth PROJECT A; the separate chord settings are affected by the preset-save fault.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "298-338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L298-L338"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    }
   ]
  },
  {
   "id": "preset_2",
   "name": "PRESETS > P2",
   "how_to_get_there": "Press SAVE and turn SELECT to P2.",
   "what_it_is": "P2 shares its saved music with synth PROJECT B; the separate chord settings are affected by the preset-save fault.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "298-338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L298-L338"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    }
   ]
  },
  {
   "id": "preset_3",
   "name": "PRESETS > P3",
   "how_to_get_there": "Press SAVE and turn SELECT to P3.",
   "what_it_is": "P3 shares its saved music with synth PROJECT C; the separate chord settings are affected by the preset-save fault.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "298-338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L298-L338"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    }
   ]
  },
  {
   "id": "preset_4",
   "name": "PRESETS > P4",
   "how_to_get_there": "Press SAVE and turn SELECT to P4.",
   "what_it_is": "P4 shares its saved music with synth PROJECT D; the separate chord settings are affected by the preset-save fault.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "298-338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L298-L338"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    }
   ]
  },
  {
   "id": "looper_layer_1",
   "name": "LOOPER > LAYER 1",
   "how_to_get_there": "Press SEQ and turn SELECT to LAYER 1.",
   "what_it_is": "Selected event layer; its recordings exist in working memory only.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "551-557",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "21-39",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L21-L39"
    }
   ]
  },
  {
   "id": "looper_layer_2",
   "name": "LOOPER > LAYER 2",
   "how_to_get_there": "Press SEQ and turn SELECT to LAYER 2.",
   "what_it_is": "Selected event layer; its recordings exist in working memory only.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "551-557",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "21-39",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L21-L39"
    }
   ]
  },
  {
   "id": "looper_layer_3",
   "name": "LOOPER > LAYER 3",
   "how_to_get_there": "Press SEQ and turn SELECT to LAYER 3.",
   "what_it_is": "Selected event layer; its recordings exist in working memory only.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "551-557",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "21-39",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L21-L39"
    }
   ]
  },
  {
   "id": "looper_layer_4",
   "name": "LOOPER > LAYER 4",
   "how_to_get_there": "Press SEQ and turn SELECT to LAYER 4.",
   "what_it_is": "Selected event layer; its recordings exist in working memory only.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "551-557",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "21-39",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L21-L39"
    }
   ]
  },
  {
   "id": "looper_bars",
   "name": "LOOPER > BARS",
   "how_to_get_there": "Press SEQ and turn SELECT to BARS.",
   "what_it_is": "The BARS row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "558-559",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L558-L559"
    }
   ]
  },
  {
   "id": "looper_metronome",
   "name": "LOOPER > METRONOME",
   "how_to_get_there": "Press SEQ and turn SELECT to METRONOME.",
   "what_it_is": "The METRONOME row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "560-561",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L560-L561"
    }
   ]
  },
  {
   "id": "looper_clear_all",
   "name": "LOOPER > CLEAR ALL",
   "how_to_get_there": "Press SEQ and turn SELECT to CLEAR ALL.",
   "what_it_is": "The CLEAR ALL row is selected.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "562-565",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L562-L565"
    }
   ]
  },
  {
   "id": "play",
   "name": "PLAY",
   "how_to_get_there": "Turn ALGORITHM to PLAY.",
   "what_it_is": "Seven chord keys and a nine-key strumplate, with optional slash bass.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "734-751",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L734-L751"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "837-840",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "464-470",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
    }
   ]
  },
  {
   "id": "strum",
   "name": "STRUM",
   "how_to_get_there": "Turn ALGORITHM to STRUM.",
   "what_it_is": "Chord keys roll their notes 200, 80 or 40 milliseconds apart, while the nine right white keys form a strumplate.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "782-807",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
    }
   ]
  },
  {
   "id": "lead",
   "name": "LEAD",
   "how_to_get_there": "Turn ALGORITHM to LEAD.",
   "what_it_is": "All sixteen white keys play separate scale notes from the tonic at C4, with polyphonic playing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "308-317",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chord.c",
     "lines": "89-102",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
    }
   ]
  },
  {
   "id": "drone",
   "name": "DRONE",
   "how_to_get_there": "Turn ALGORITHM to DRONE.",
   "what_it_is": "A chord remains after its key is released until another chord or mode replaces it, while strumplate notes still end on release.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "773-780",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "859-870",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
    }
   ]
  },
  {
   "id": "arp",
   "name": "ARP",
   "how_to_get_there": "Turn ALGORITHM to ARP.",
   "what_it_is": "The last held chord feeds the arpeggiator, with ARP ONLY, CHORD+ARP or RHYTHM+ARP layers and a separate strumplate.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "810-824",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "518-525",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L518-L525"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "464-470",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
    }
   ]
  },
  {
   "id": "repeat",
   "name": "REPEAT",
   "how_to_get_there": "Turn ALGORITHM to REPEAT.",
   "what_it_is": "Held chord keys pulse at the chosen rate while the strumplate plays separate notes.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "825-835",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "464-470",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
    }
   ]
  },
  {
   "id": "sequencer",
   "name": "SEQUENCER",
   "how_to_get_there": "Turn ALGORITHM to SEQUENCER.",
   "what_it_is": "White keys enter chords into a repeating four-to-sixteen-step sequence, with one beat per step.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "69-76",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L69-L76"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "166-179",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L179"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "276-282",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L276-L282"
    }
   ]
  },
  {
   "id": "drum",
   "name": "DRUM",
   "how_to_get_there": "Turn ALGORITHM to DRUM.",
   "what_it_is": "The white keys repeat seven drum pads, and holding a direction repeats held pads at that direction’s rate.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "14-15",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "182-199",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "294-305",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
    }
   ]
  },
  {
   "id": "drum_loop",
   "name": "DRUM LOOP",
   "how_to_get_there": "Turn ALGORITHM to DRUM LOOP.",
   "what_it_is": "White keys select seven loop styles with eight variations each; selecting this mode starts the loop.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "17-20",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "760-762",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "578-594",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L578-L594"
    }
   ]
  },
  {
   "id": "hiro",
   "name": "CHORD HIRO",
   "how_to_get_there": "Turn ALGORITHM to CHORD HIRO.",
   "what_it_is": "Play the displayed chord degrees in time across ten song charts, with four timing difficulties and a practice speed.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcgame.c",
     "lines": "12-31",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L12-L31"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcgame.c",
     "lines": "163-185",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
    }
   ]
  },
  {
   "id": "ear",
   "name": "EAR TRAINER",
   "how_to_get_there": "Turn ALGORITHM to EAR TRAINER.",
   "what_it_is": "Identify chords, four-chord progressions, modified chords or progressions, and intervals across six levels.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcgame.c",
     "lines": "33-35",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L33-L35"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcgame.c",
     "lines": "189-202",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L189-L202"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcgame.c",
     "lines": "218-246",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
    }
   ]
  },
  {
   "id": "mixer",
   "name": "MIXER",
   "how_to_get_there": "Turn ALGORITHM to MIXER.",
   "what_it_is": "White keys switch the four looper layers and metronome on or off.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-792",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L792"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "255-262",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
    }
   ]
  },
  {
   "id": "synth_any",
   "name": "Hidden synth: common controls",
   "how_to_get_there": "Hold HOME on the chord interface to enter the synth interface.",
   "what_it_is": "Common behavior on ordinary synth pages; menu, naming, confirmation and held-button layers override these controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_input.c",
     "lines": "681-698",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L681-L698"
    }
   ]
  },
  {
   "id": "synth_home",
   "name": "Hidden synth HOME",
   "how_to_get_there": "Tap HOME in the synth interface.",
   "what_it_is": "Four engine-specific sound controls above the sound display; the engine-specific HOME modes below give each knob’s job.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui.c",
     "lines": "344-351",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L344-L351"
    }
   ]
  },
  {
   "id": "synth_env",
   "name": "Synth ENV",
   "how_to_get_there": "Tap ENV in the synth interface and repeat until ENV appears.",
   "what_it_is": "ENV: envelope attack time, envelope decay time, envelope sustain level, envelope release time.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "306",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L306"
    }
   ]
  },
  {
   "id": "synth_env_dest",
   "name": "Synth ENV DEST",
   "how_to_get_there": "Tap ENV in the synth interface and repeat until ENV DEST appears.",
   "what_it_is": "ENV DEST: envelope amount to the filter, envelope amount to pitch, envelope amount to shape.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "307",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
    }
   ]
  },
  {
   "id": "synth_lfo",
   "name": "Synth LFO",
   "how_to_get_there": "Tap LFO in the synth interface and repeat until LFO appears.",
   "what_it_is": "LFO: LFO speed, LFO waveform, LFO phase, LFO fade-in time.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "308",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L308"
    }
   ]
  },
  {
   "id": "synth_lfo_dest",
   "name": "Synth LFO DEST",
   "how_to_get_there": "Tap LFO in the synth interface and repeat until LFO DEST appears.",
   "what_it_is": "LFO DEST: LFO pitch depth, LFO filter depth, LFO shape depth, LFO volume depth.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "309",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L309"
    }
   ]
  },
  {
   "id": "synth_mod",
   "name": "Synth MOD",
   "how_to_get_there": "Tap LFO in the synth interface and repeat until MOD appears.",
   "what_it_is": "MOD: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "310",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L310"
    }
   ]
  },
  {
   "id": "synth_fx",
   "name": "Synth FX",
   "how_to_get_there": "Tap FX in the synth interface and repeat until FX appears.",
   "what_it_is": "FX: distortion amount, chorus send, delay send, reverb send.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "311",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L311"
    }
   ]
  },
  {
   "id": "synth_slicer",
   "name": "Synth SLICER",
   "how_to_get_there": "Tap FX in the synth interface and repeat until SLICER appears.",
   "what_it_is": "SLICER: slicer mode, slicer pattern, slicer rate, slicer depth.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "312",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L312"
    }
   ]
  },
  {
   "id": "synth_dly",
   "name": "Synth DLY",
   "how_to_get_there": "Tap FX in the synth interface and repeat until DLY appears.",
   "what_it_is": "DLY: delay division, delay feedback, delay tone, delay mix.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "313",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L313"
    }
   ]
  },
  {
   "id": "synth_reverb",
   "name": "Synth REVERB",
   "how_to_get_there": "Tap FX in the synth interface and repeat until REVERB appears.",
   "what_it_is": "REVERB: reverb model, reverb size, reverb damping.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "314",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
    }
   ]
  },
  {
   "id": "synth_chorus",
   "name": "Synth CHORUS",
   "how_to_get_there": "Tap FX in the synth interface and repeat until CHORUS appears.",
   "what_it_is": "CHORUS: chorus rate, chorus depth.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "315",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
    }
   ]
  },
  {
   "id": "synth_scl",
   "name": "Synth SCL",
   "how_to_get_there": "Tap SEL in the synth interface and repeat until SCL appears.",
   "what_it_is": "SCL: scale root, scale, keyboard and sequence quantization, transpose amount.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "316",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L316"
    }
   ]
  },
  {
   "id": "synth_chord",
   "name": "Synth CHORD",
   "how_to_get_there": "Tap SEL in the synth interface and repeat until CHORD appears.",
   "what_it_is": "CHORD: one-key chord type, chord voicing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "317",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
    }
   ]
  },
  {
   "id": "synth_slices",
   "name": "Synth SLICES",
   "how_to_get_there": "Select a SLICE-engine track in the synth interface, then tap EDIT until SLICES appears.",
   "what_it_is": "SLICES: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "320",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L320"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui.c",
     "lines": "122-129",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L122-L129"
    }
   ]
  },
  {
   "id": "synth_voice",
   "name": "Synth VOICE",
   "how_to_get_there": "Tap EDIT in the synth interface and repeat until VOICE appears.",
   "what_it_is": "VOICE: voice mode, glide time, glide mode, note priority.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "326",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L326"
    }
   ]
  },
  {
   "id": "synth_voice_2",
   "name": "Synth VOICE 2",
   "how_to_get_there": "Tap EDIT in the synth interface and repeat until VOICE 2 appears.",
   "what_it_is": "VOICE 2: voice allocation, voice detuning, pan position, track mute.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "327",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L327"
    }
   ]
  },
  {
   "id": "synth_global",
   "name": "Synth GLOBAL",
   "how_to_get_there": "Tap GLO in the synth interface and repeat until GLOBAL appears.",
   "what_it_is": "GLOBAL: tempo, global swing, clock source, master tuning.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "328",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L328"
    }
   ]
  },
  {
   "id": "synth_system",
   "name": "Synth SYSTEM",
   "how_to_get_there": "Tap GLO in the synth interface and repeat until SYSTEM appears.",
   "what_it_is": "SYSTEM: MIDI input source, SYNC, MIDI channel routing, CPU.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "329",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L329"
    }
   ]
  },
  {
   "id": "synth_presets",
   "name": "Synth PRESETS",
   "how_to_get_there": "Tap SAVE in the synth interface and repeat until PRESETS appears.",
   "what_it_is": "PRESETS: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "330",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L330"
    }
   ]
  },
  {
   "id": "synth_user",
   "name": "Synth USER",
   "how_to_get_there": "Tap SAVE in the synth interface and repeat until USER appears.",
   "what_it_is": "USER: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "331",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L331"
    }
   ]
  },
  {
   "id": "synth_project",
   "name": "Synth PROJECT",
   "how_to_get_there": "Tap SAVE in the synth interface and repeat until PROJECT appears.",
   "what_it_is": "PROJECT: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "332",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L332"
    }
   ]
  },
  {
   "id": "synth_tools",
   "name": "Synth TOOLS",
   "how_to_get_there": "Tap SAVE in the synth interface and repeat until TOOLS appears.",
   "what_it_is": "TOOLS: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "333",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L333"
    }
   ]
  },
  {
   "id": "synth_arp",
   "name": "Synth ARP",
   "how_to_get_there": "Tap ARP in the synth interface and repeat until ARP appears.",
   "what_it_is": "ARP: arpeggiator mode, arpeggiator rate, arpeggiator octave range, arpeggiator gate length.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "334",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L334"
    }
   ]
  },
  {
   "id": "synth_arp_2",
   "name": "Synth ARP 2",
   "how_to_get_there": "Tap ARP in the synth interface and repeat until ARP 2 appears.",
   "what_it_is": "ARP 2: arpeggiator swing, arpeggiator probability, arpeggiator latch, arpeggiator note order.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "335",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L335"
    }
   ]
  },
  {
   "id": "synth_step",
   "name": "Synth STEP",
   "how_to_get_there": "Tap SEQ in the synth interface and repeat until STEP appears.",
   "what_it_is": "STEP: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "336",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L336"
    }
   ]
  },
  {
   "id": "synth_pattern",
   "name": "Synth PATTERN",
   "how_to_get_there": "Tap SEQ in the synth interface and repeat until PATTERN appears.",
   "what_it_is": "PATTERN: pattern length, pattern division, pattern swing, pattern gate length.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "337",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L337"
    }
   ]
  },
  {
   "id": "synth_phrases",
   "name": "Synth PHRASES",
   "how_to_get_there": "Tap SEQ in the synth interface and repeat until PHRASES appears.",
   "what_it_is": "PHRASES: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L338"
    }
   ]
  },
  {
   "id": "synth_mixer",
   "name": "Synth MIXER",
   "how_to_get_there": "Tap GLO in the synth interface and repeat until MIXER appears.",
   "what_it_is": "MIXER: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "339",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L339"
    }
   ]
  },
  {
   "id": "synth_song",
   "name": "Synth SONG",
   "how_to_get_there": "Tap SEQ in the synth interface and repeat until SONG appears.",
   "what_it_is": "SONG: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "340",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L340"
    }
   ]
  },
  {
   "id": "synth_chance",
   "name": "Synth CHANCE",
   "how_to_get_there": "Tap SEQ in the synth interface and repeat until CHANCE appears.",
   "what_it_is": "CHANCE: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "341",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L341"
    }
   ]
  },
  {
   "id": "synth_motion",
   "name": "Synth MOTION",
   "how_to_get_there": "Tap SEQ in the synth interface and repeat until MOTION appears.",
   "what_it_is": "MOTION: The four cards name the controls described below.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/params.c",
     "lines": "342",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L342"
    }
   ]
  },
  {
   "id": "synth_home_drum",
   "name": "Synth DRUM HOME",
   "how_to_get_there": "Select DRUM through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The DRUM engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_drum.c",
     "lines": "280-302",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
    }
   ]
  },
  {
   "id": "synth_edit1_drum",
   "name": "Synth DRUM KIT",
   "how_to_get_there": "Select DRUM through PRESETS or the EDIT layer, then tap EDIT until its KIT page appears.",
   "what_it_is": "The DRUM engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_drum.c",
     "lines": "280-302",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
    }
   ]
  },
  {
   "id": "synth_edit2_drum",
   "name": "Synth DRUM HIT",
   "how_to_get_there": "Select DRUM through PRESETS or the EDIT layer, then tap EDIT until its HIT page appears.",
   "what_it_is": "The DRUM engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_drum.c",
     "lines": "280-302",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
    }
   ]
  },
  {
   "id": "synth_home_analog",
   "name": "Synth ANALOG HOME",
   "how_to_get_there": "Select ANALOG through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The ANALOG engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_analog.c",
     "lines": "96-115",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
    }
   ]
  },
  {
   "id": "synth_edit1_analog",
   "name": "Synth ANALOG OSC",
   "how_to_get_there": "Select ANALOG through PRESETS or the EDIT layer, then tap EDIT until its OSC page appears.",
   "what_it_is": "The ANALOG engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_analog.c",
     "lines": "96-115",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
    }
   ]
  },
  {
   "id": "synth_edit2_analog",
   "name": "Synth ANALOG FLT",
   "how_to_get_there": "Select ANALOG through PRESETS or the EDIT layer, then tap EDIT until its FLT page appears.",
   "what_it_is": "The ANALOG engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_analog.c",
     "lines": "96-115",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
    }
   ]
  },
  {
   "id": "synth_home_trio",
   "name": "Synth TRIO HOME",
   "how_to_get_there": "Select TRIO through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The TRIO engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_trio.c",
     "lines": "355-373",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
    }
   ]
  },
  {
   "id": "synth_edit1_trio",
   "name": "Synth TRIO OSC",
   "how_to_get_there": "Select TRIO through PRESETS or the EDIT layer, then tap EDIT until its OSC page appears.",
   "what_it_is": "The TRIO engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_trio.c",
     "lines": "355-373",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
    }
   ]
  },
  {
   "id": "synth_edit2_trio",
   "name": "Synth TRIO TONE",
   "how_to_get_there": "Select TRIO through PRESETS or the EDIT layer, then tap EDIT until its TONE page appears.",
   "what_it_is": "The TRIO engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_trio.c",
     "lines": "355-373",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
    }
   ]
  },
  {
   "id": "synth_home_lofi",
   "name": "Synth LOFI HOME",
   "how_to_get_there": "Select LOFI through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The LOFI engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_lofi.c",
     "lines": "216-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
    }
   ]
  },
  {
   "id": "synth_edit1_lofi",
   "name": "Synth LOFI CHIP",
   "how_to_get_there": "Select LOFI through PRESETS or the EDIT layer, then tap EDIT until its CHIP page appears.",
   "what_it_is": "The LOFI engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_lofi.c",
     "lines": "216-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
    }
   ]
  },
  {
   "id": "synth_edit2_lofi",
   "name": "Synth LOFI MOTN",
   "how_to_get_there": "Select LOFI through PRESETS or the EDIT layer, then tap EDIT until its MOTN page appears.",
   "what_it_is": "The LOFI engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_lofi.c",
     "lines": "216-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
    }
   ]
  },
  {
   "id": "synth_home_noise",
   "name": "Synth NOISE HOME",
   "how_to_get_there": "Select NOISE through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The NOISE engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_noise.c",
     "lines": "251-271",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
    }
   ]
  },
  {
   "id": "synth_edit1_noise",
   "name": "Synth NOISE SRC",
   "how_to_get_there": "Select NOISE through PRESETS or the EDIT layer, then tap EDIT until its SRC page appears.",
   "what_it_is": "The NOISE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_noise.c",
     "lines": "251-271",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
    }
   ]
  },
  {
   "id": "synth_edit2_noise",
   "name": "Synth NOISE MOVE",
   "how_to_get_there": "Select NOISE through PRESETS or the EDIT layer, then tap EDIT until its MOVE page appears.",
   "what_it_is": "The NOISE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_noise.c",
     "lines": "251-271",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
    }
   ]
  },
  {
   "id": "synth_home_fm6",
   "name": "Synth FM6 HOME",
   "how_to_get_there": "Select FM6 through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The FM6 engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_fm6.c",
     "lines": "347-369",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
    }
   ]
  },
  {
   "id": "synth_edit1_fm6",
   "name": "Synth FM6 OPS",
   "how_to_get_there": "Select FM6 through PRESETS or the EDIT layer, then tap EDIT until its OPS page appears.",
   "what_it_is": "The FM6 engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_fm6.c",
     "lines": "347-369",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
    }
   ]
  },
  {
   "id": "synth_edit2_fm6",
   "name": "Synth FM6 PATCH",
   "how_to_get_there": "Select FM6 through PRESETS or the EDIT layer, then tap EDIT until its PATCH page appears.",
   "what_it_is": "The FM6 engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_fm6.c",
     "lines": "347-369",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
    }
   ]
  },
  {
   "id": "synth_home_sample",
   "name": "Synth SAMPLE HOME",
   "how_to_get_there": "Select SAMPLE through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The SAMPLE engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_sample.c",
     "lines": "227-247",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
    }
   ]
  },
  {
   "id": "synth_edit1_sample",
   "name": "Synth SAMPLE SET",
   "how_to_get_there": "Select SAMPLE through PRESETS or the EDIT layer, then tap EDIT until its SET page appears.",
   "what_it_is": "The SAMPLE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_sample.c",
     "lines": "227-247",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
    }
   ]
  },
  {
   "id": "synth_edit2_sample",
   "name": "Synth SAMPLE TONE",
   "how_to_get_there": "Select SAMPLE through PRESETS or the EDIT layer, then tap EDIT until its TONE page appears.",
   "what_it_is": "The SAMPLE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_sample.c",
     "lines": "227-247",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
    }
   ]
  },
  {
   "id": "synth_home_slice",
   "name": "Synth SLICE HOME",
   "how_to_get_there": "Select SLICE through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The SLICE engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_slice.c",
     "lines": "602-623",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
    }
   ]
  },
  {
   "id": "synth_edit1_slice",
   "name": "Synth SLICE SLCE",
   "how_to_get_there": "Select SLICE through PRESETS or the EDIT layer, then tap EDIT until its SLCE page appears.",
   "what_it_is": "The SLICE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_slice.c",
     "lines": "602-623",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
    }
   ]
  },
  {
   "id": "synth_edit2_slice",
   "name": "Synth SLICE PLAY",
   "how_to_get_there": "Select SLICE through PRESETS or the EDIT layer, then tap EDIT until its PLAY page appears.",
   "what_it_is": "The SLICE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_slice.c",
     "lines": "602-623",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
    }
   ]
  },
  {
   "id": "synth_home_chord",
   "name": "Synth CHORD HOME",
   "how_to_get_there": "Select CHORD through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The CHORD engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_hc.c",
     "lines": "110-129",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
    }
   ]
  },
  {
   "id": "synth_edit1_chord",
   "name": "Synth CHORD VOICE",
   "how_to_get_there": "Select CHORD through PRESETS or the EDIT layer, then tap EDIT until its VOICE page appears.",
   "what_it_is": "The CHORD engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_hc.c",
     "lines": "110-129",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
    }
   ]
  },
  {
   "id": "synth_edit2_chord",
   "name": "Synth CHORD FM",
   "how_to_get_there": "Select CHORD through PRESETS or the EDIT layer, then tap EDIT until its FM page appears.",
   "what_it_is": "The CHORD engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_hc.c",
     "lines": "110-129",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
    }
   ]
  },
  {
   "id": "synth_home_wheel",
   "name": "Synth WHEEL HOME",
   "how_to_get_there": "Select WHEEL through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The WHEEL engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_wheel.c",
     "lines": "278-297",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
    }
   ]
  },
  {
   "id": "synth_edit1_wheel",
   "name": "Synth WHEEL BARS",
   "how_to_get_there": "Select WHEEL through PRESETS or the EDIT layer, then tap EDIT until its BARS page appears.",
   "what_it_is": "The WHEEL engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_wheel.c",
     "lines": "278-297",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
    }
   ]
  },
  {
   "id": "synth_edit2_wheel",
   "name": "Synth WHEEL TONE",
   "how_to_get_there": "Select WHEEL through PRESETS or the EDIT layer, then tap EDIT until its TONE page appears.",
   "what_it_is": "The WHEEL engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_wheel.c",
     "lines": "278-297",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
    }
   ]
  },
  {
   "id": "synth_home_voice",
   "name": "Synth VOICE HOME",
   "how_to_get_there": "Select VOICE through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The VOICE engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_formant.c",
     "lines": "213-232",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
    }
   ]
  },
  {
   "id": "synth_edit1_voice",
   "name": "Synth VOICE VOWL",
   "how_to_get_there": "Select VOICE through PRESETS or the EDIT layer, then tap EDIT until its VOWL page appears.",
   "what_it_is": "The VOICE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_formant.c",
     "lines": "213-232",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
    }
   ]
  },
  {
   "id": "synth_edit2_voice",
   "name": "Synth VOICE TONE",
   "how_to_get_there": "Select VOICE through PRESETS or the EDIT layer, then tap EDIT until its TONE page appears.",
   "what_it_is": "The VOICE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_formant.c",
     "lines": "213-232",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
    }
   ]
  },
  {
   "id": "synth_home_phys",
   "name": "Synth PHYS HOME",
   "how_to_get_there": "Select PHYS through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The PHYS engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_phys.c",
     "lines": "233-253",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
    }
   ]
  },
  {
   "id": "synth_edit1_phys",
   "name": "Synth PHYS BODY",
   "how_to_get_there": "Select PHYS through PRESETS or the EDIT layer, then tap EDIT until its BODY page appears.",
   "what_it_is": "The PHYS engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_phys.c",
     "lines": "233-253",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
    }
   ]
  },
  {
   "id": "synth_edit2_phys",
   "name": "Synth PHYS EXCT",
   "how_to_get_there": "Select PHYS through PRESETS or the EDIT layer, then tap EDIT until its EXCT page appears.",
   "what_it_is": "The PHYS engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_phys.c",
     "lines": "233-253",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
    }
   ]
  },
  {
   "id": "synth_home_grain",
   "name": "Synth GRAIN HOME",
   "how_to_get_there": "Select GRAIN through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The GRAIN engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_grain.c",
     "lines": "431-451",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
    }
   ]
  },
  {
   "id": "synth_edit1_grain",
   "name": "Synth GRAIN GRAN",
   "how_to_get_there": "Select GRAIN through PRESETS or the EDIT layer, then tap EDIT until its GRAN page appears.",
   "what_it_is": "The GRAIN engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_grain.c",
     "lines": "431-451",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
    }
   ]
  },
  {
   "id": "synth_edit2_grain",
   "name": "Synth GRAIN SPRY",
   "how_to_get_there": "Select GRAIN through PRESETS or the EDIT layer, then tap EDIT until its SPRY page appears.",
   "what_it_is": "The GRAIN engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_grain.c",
     "lines": "431-451",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
    }
   ]
  },
  {
   "id": "synth_home_phase",
   "name": "Synth PHASE HOME",
   "how_to_get_there": "Select PHASE through PRESETS or the EDIT layer, then tap HOME.",
   "what_it_is": "The PHASE engine’s HOME controls.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_phase.c",
     "lines": "183-201",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
    }
   ]
  },
  {
   "id": "synth_edit1_phase",
   "name": "Synth PHASE PHS",
   "how_to_get_there": "Select PHASE through PRESETS or the EDIT layer, then tap EDIT until its PHS page appears.",
   "what_it_is": "The PHASE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_phase.c",
     "lines": "183-201",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
    }
   ]
  },
  {
   "id": "synth_edit2_phase",
   "name": "Synth PHASE LINE",
   "how_to_get_there": "Select PHASE through PRESETS or the EDIT layer, then tap EDIT until its LINE page appears.",
   "what_it_is": "The PHASE engine’s sound parameters.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/eng_phase.c",
     "lines": "183-201",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
    }
   ]
  },
  {
   "id": "synth_drum_grid",
   "name": "Synth DRUM step grid",
   "how_to_get_there": "Open STEP on a DRUM track.",
   "what_it_is": "Eight drum lanes with sixteen steps per page.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui.c",
     "lines": "205-212",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L205-L212"
    }
   ]
  },
  {
   "id": "synth_layer_fx",
   "name": "Synth FX HOLD",
   "how_to_get_there": "Hold FX until the map appears, or hold it and touch a shortcut.",
   "what_it_is": "Temporary performance effects and macros. First opening this layer saves its seen hint setting without a question once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_layer.c",
     "lines": "99-106",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L106"
    }
   ]
  },
  {
   "id": "synth_layer_glo",
   "name": "Synth GLO SET",
   "how_to_get_there": "Hold GLO until the map appears, or hold it and touch a shortcut.",
   "what_it_is": "Track mutes, solos, levels and tap tempo. First opening this layer saves its seen hint setting without a question once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_layer.c",
     "lines": "99-106",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L106"
    }
   ]
  },
  {
   "id": "synth_layer_scl",
   "name": "Synth SCL SET",
   "how_to_get_there": "Hold SEL until the map appears, or hold it and touch a shortcut.",
   "what_it_is": "Scale root, scale, chord type and voicing. First opening this layer saves its seen hint setting without a question once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_layer.c",
     "lines": "99-106",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L106"
    }
   ]
  },
  {
   "id": "synth_layer_edit",
   "name": "Synth EDIT SET",
   "how_to_get_there": "Hold EDIT until the map appears, or hold it and touch a shortcut.",
   "what_it_is": "Engine and sound selection. First opening this layer saves its seen hint setting without a question once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_layer.c",
     "lines": "99-106",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L106"
    }
   ]
  },
  {
   "id": "synth_name",
   "name": "Synth NAME editor",
   "how_to_get_there": "Choose a save action, or tap EDIT on USER or PROJECT.",
   "what_it_is": "A twelve-character name editor; white keys type and black keys edit, with no sounding notes.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_name.c",
     "lines": "3-31",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L3-L31"
    }
   ]
  },
  {
   "id": "synth_name_user_save",
   "name": "Synth NAME: save a user sound",
   "how_to_get_there": "Open NAME to save a user sound.",
   "what_it_is": "Uses the common NAME keys and knobs; OCT+ completes this particular write.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_name.c",
     "lines": "206-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
    }
   ]
  },
  {
   "id": "synth_name_user_rename",
   "name": "Synth NAME: rename a user sound",
   "how_to_get_there": "Open NAME to rename a user sound.",
   "what_it_is": "Uses the common NAME keys and knobs; OCT+ completes this particular write.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_name.c",
     "lines": "206-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
    }
   ]
  },
  {
   "id": "synth_name_project_save",
   "name": "Synth NAME: save a project",
   "how_to_get_there": "Open NAME to save a project.",
   "what_it_is": "Uses the common NAME keys and knobs; OCT+ completes this particular write.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_name.c",
     "lines": "206-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
    }
   ]
  },
  {
   "id": "synth_name_project_rename",
   "name": "Synth NAME: rename a project",
   "how_to_get_there": "Open NAME to rename a project.",
   "what_it_is": "Uses the common NAME keys and knobs; OCT+ completes this particular write.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_name.c",
     "lines": "206-237",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
    }
   ]
  },
  {
   "id": "synth_confirm_overwrite_user",
   "name": "Synth question: Replace user slot",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_overwrite_project",
   "name": "Synth question: Replace project",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_erase_user",
   "name": "Synth question: Erase user slot",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_load_phrase",
   "name": "Synth question: Replace sequence",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_clear_motion",
   "name": "Synth question: Clear motion",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_delete_row",
   "name": "Synth question: Delete song row",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_clear_song",
   "name": "Synth question: Clear song order",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_init_sound",
   "name": "Synth question: Initialize sound",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_confirm_clear_steps",
   "name": "Synth question: Clear sequence",
   "how_to_get_there": "Choose the corresponding action and release OCT+.",
   "what_it_is": "OCT+ confirms and OCT- cancels; encoders do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_draw.c",
     "lines": "708-758",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
    }
   ]
  },
  {
   "id": "synth_menu",
   "name": "Synth MENU",
   "how_to_get_there": "Hold HOME in the synth interface for 0.7 seconds.",
   "what_it_is": "Color, speaker filtering, shortcut hold time, light behavior, calibration, about and back.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "7-8",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L7-L8"
    }
   ]
  },
  {
   "id": "synth_menu_color",
   "name": "Synth menu COLOR",
   "how_to_get_there": "Select COLOR with PRESETS in the synth menu.",
   "what_it_is": "The change takes effect now and saves without a question after menu close once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "274-278",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L274-L278"
    }
   ]
  },
  {
   "id": "synth_menu_speaker",
   "name": "Synth menu SPEAKER",
   "how_to_get_there": "Select SPEAKER with PRESETS in the synth menu.",
   "what_it_is": "The change takes effect now and saves without a question after menu close once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "279-285",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L279-L285"
    }
   ]
  },
  {
   "id": "synth_menu_hold",
   "name": "Synth menu HOLD",
   "how_to_get_there": "Select HOLD with PRESETS in the synth menu.",
   "what_it_is": "The change takes effect now and saves without a question after menu close once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "286-291",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L286-L291"
    }
   ]
  },
  {
   "id": "synth_menu_leds",
   "name": "Synth menu LEDS",
   "how_to_get_there": "Select LEDS with PRESETS in the synth menu.",
   "what_it_is": "The change takes effect now and saves without a question after menu close once stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "292-296",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L292-L296"
    }
   ]
  },
  {
   "id": "synth_about",
   "name": "Synth ABOUT / CREDITS",
   "how_to_get_there": "Choose ABOUT in the synth menu and release OCT+.",
   "what_it_is": "Version and attribution information inherited from Felucca.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "108-140",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L108-L140"
    }
   ]
  },
  {
   "id": "synth_calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Choose CALIBRATION in the synth menu, or power on holding OCT- and OCT+.",
   "what_it_is": "Teaches each printed button and clockwise encoder direction; thirty seconds without input restores the previous table.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_input.c",
     "lines": "983-1043",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L983-L1043"
    }
   ]
  },
  {
   "id": "synth_factory_reset",
   "name": "Factory reset countdown",
   "how_to_get_there": "Power on with HOME and SAVE held together.",
   "what_it_is": "A three-second countdown; releasing either button cancels before erasure.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/main.c",
     "lines": "115-137",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L115-L137"
    }
   ]
  },
  {
   "id": "synth_update",
   "name": "Update-mode countdown",
   "how_to_get_there": "Hold OCT- and OCT+ together for more than two seconds.",
   "what_it_is": "A countdown reaches the bootloader after five seconds held; releasing cancels it.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/main.c",
     "lines": "242-268",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L242-L268"
    }
   ]
  },
  {
   "id": "synth_recovery",
   "name": "Automatic boot recovery",
   "how_to_get_there": "Triggered after two unsuccessful startup attempts.",
   "what_it_is": "Enters the bootloader before normal startup, so firmware can be recovered.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/main.c",
     "lines": "328-340",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L328-L340"
    }
   ]
  },
  {
   "id": "synth_recording",
   "name": "Synth live recording",
   "how_to_get_there": "Tap REC to arm the selected track, starting playback if stopped.",
   "what_it_is": "Notes and eligible changes on the selected track record into working memory; projects preserve the full result.",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_input.c",
     "lines": "235-256",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L235-L256"
    }
   ]
  }
 ],
 "controls": {
  "encoder_select": [
   {
    "mode": "key_menu",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves the menu cursor without changing the selected row’s value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-788",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L788"
     }
    ]
   },
   {
    "mode": "sound_menu",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves the menu cursor without changing the selected row’s value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-788",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L788"
     }
    ]
   },
   {
    "mode": "mode_menu",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves the menu cursor without changing the selected row’s value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-788",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L788"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves the menu cursor without changing the selected row’s value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-788",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L788"
     }
    ]
   },
   {
    "mode": "looper",
    "gesture": "turn",
    "short_label": "ROW",
    "action": "Moves the menu cursor without changing the selected row’s value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-788",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L788"
     }
    ]
   },
   {
    "mode": "env_list",
    "gesture": "turn",
    "short_label": "ENVELOPE",
    "action": "Chooses and immediately applies a preset envelope, clearing the attack and release overrides without wrapping at the list ends.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "632-655",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L632-L655"
     }
    ]
   },
   {
    "mode": "lfo_list",
    "gesture": "turn",
    "short_label": "VIBRATO",
    "action": "Chooses and immediately applies a vibrato choice without wrapping at the list ends.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "632-655",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L632-L655"
     }
    ]
   },
   {
    "mode": "sound_list",
    "gesture": "turn",
    "short_label": "SOUND",
    "action": "Chooses and immediately applies a sound without wrapping at the list ends.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "632-655",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L632-L655"
     }
    ]
   },
   {
    "mode": "mode_list",
    "gesture": "turn",
    "short_label": "MODE",
    "action": "Chooses and immediately applies a play mode without wrapping at the list ends.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "632-655",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L632-L655"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "turn",
    "short_label": "KEY",
    "action": "Transposes the key for all four tracks, except in SEQUENCER and MIXER.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-788",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L788"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "180-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L180-L199"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "turn",
    "short_label": "STEP",
    "action": "With the home screen showing, moves the chord-step write cursor with wrapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L780"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "turn",
    "short_label": "LAYER",
    "action": "With the home screen showing, selects one of the four layers.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "776-778",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L776-L778"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "turn",
    "action": "Changes the tempo from 40 to 240 BPM.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "934-937",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L934-L937"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L115"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L266-L269"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "key_menu",
    "gesture": "shows",
    "short_label": "KEY",
    "action": "Key, scale, layout, chord modifiers, bass and voicing with the selected row and its value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1512-1565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1512-L1565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1569-1583",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1569-L1583"
     }
    ]
   },
   {
    "mode": "sound_menu",
    "gesture": "shows",
    "short_label": "SOUND",
    "action": "Sound, envelope, effects, speaker and MIDI input with the selected row and its value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1512-1565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1512-L1565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1569-1583",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1569-L1583"
     }
    ]
   },
   {
    "mode": "mode_menu",
    "gesture": "shows",
    "short_label": "MODE",
    "action": "Play mode, tempo, sequence, drums and game options with the selected row and its value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1512-1565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1512-L1565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1569-1583",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1569-L1583"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "shows",
    "short_label": "PRESETS",
    "action": "Shows P1/A, P2/B, P3/C and P4/D as shared project slots, displaying the saved project name or its empty status.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1512-1565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1512-L1565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1569-1583",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1569-L1583"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "471-480",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L471-L480"
     }
    ]
   },
   {
    "mode": "looper",
    "gesture": "shows",
    "short_label": "LOOPER",
    "action": "Four event layers, loop length, metronome and clearing with the selected row and its value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1512-1565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1512-L1565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1569-1583",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1569-L1583"
     }
    ]
   },
   {
    "mode": "env_list",
    "gesture": "shows",
    "short_label": "ENVELOPES",
    "action": "Shows the active envelope choice until HOME is tapped, SEL, FX, GLO, EDIT, SAVE, SEQ, ENV or LFO changes the page, ALGORITHM or PRESETS opens its temporary mode or sound list, or HOME is held to enter the synth interface; temporary lists expire after 1.5 seconds without a turn, while ARP, PLAY, REC and octave buttons keep this persistent list open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1588-1629",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1588-L1629"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "717-748",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L717-L748"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "858-859",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L858-L859"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "642-651",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L642-L651"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-716",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L716"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "790-797",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L797"
     }
    ]
   },
   {
    "mode": "lfo_list",
    "gesture": "shows",
    "short_label": "VIBRATO",
    "action": "Shows the active vibrato choice until HOME is tapped, SEL, FX, GLO, EDIT, SAVE, SEQ, ENV or LFO changes the page, ALGORITHM or PRESETS opens its temporary mode or sound list, or HOME is held to enter the synth interface; temporary lists expire after 1.5 seconds without a turn, while ARP, PLAY, REC and octave buttons keep this persistent list open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1588-1629",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1588-L1629"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "717-748",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L717-L748"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "858-859",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L858-L859"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "642-651",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L642-L651"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-716",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L716"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "790-797",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L797"
     }
    ]
   },
   {
    "mode": "sound_list",
    "gesture": "shows",
    "short_label": "SOUNDS",
    "action": "Shows the sounds with the active choice marked, returning home after 1.5 seconds without a turn or when a panel button is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1588-1629",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1588-L1629"
     }
    ]
   },
   {
    "mode": "mode_list",
    "gesture": "shows",
    "short_label": "MODES",
    "action": "Shows the play modes with the active choice marked, returning home after 1.5 seconds without a turn or when a panel button is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1588-1629",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1588-L1629"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "shows",
    "short_label": "PLAY",
    "action": "Shows the chord name, degree, inversion, lock and hold indicators, sounding notes on a piano, active effects and the four looper states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1403-1442",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1403-L1442"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1444-1508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1444-L1508"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "shows",
    "short_label": "CHORD",
    "action": "Shows the chord name, degree, inversion, lock and hold indicators, sounding notes on a piano, active effects and the four looper states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1403-1442",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1403-L1442"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1444-1508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1444-L1508"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "shows",
    "short_label": "NOTES",
    "action": "Shows the sounding scale-note names from low to high, a piano, effects and looper states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1342-1354",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1342-L1354"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "shows",
    "short_label": "CHORD",
    "action": "Shows the chord name, degree, inversion, lock and hold indicators, sounding notes on a piano, active effects and the four looper states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1403-1442",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1403-L1442"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1444-1508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1444-L1508"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "shows",
    "short_label": "CHORD",
    "action": "Shows the chord name, degree, inversion, lock and hold indicators, sounding notes on a piano, active effects and the four looper states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1403-1442",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1403-L1442"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1444-1508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1444-L1508"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "shows",
    "short_label": "CHORD",
    "action": "Shows the chord name, degree, inversion, lock and hold indicators, sounding notes on a piano, active effects and the four looper states.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1403-1442",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1403-L1442"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1444-1508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1444-L1508"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "shows",
    "short_label": "SEQUENCER",
    "action": "Shows sixteen chord cells, the write cursor, current playback step and active sequence length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1029-1051",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1029-L1051"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "shows",
    "short_label": "DRUM",
    "action": "Shows seven drum pads, held-pad highlights, auto-drum rate, kit and looper timing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1054-1074",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1054-L1074"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "shows",
    "short_label": "DRUM LOOP",
    "action": "Shows the style, variation, six drum lanes across sixteen steps, transport and looper timing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1077-1099",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1077-L1099"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "shows",
    "short_label": "CHORD HIRO",
    "action": "Shows the song, difficulty, upcoming chords, timing feedback, score, combo and final result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1102-1145",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1102-L1145"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "shows",
    "short_label": "EAR TRAINER",
    "action": "Shows the level, listen or answer phase, result, streak and score.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1148-1185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1148-L1185"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "shows",
    "short_label": "MIXER",
    "action": "Shows each layer’s level, mute and looper state, the selected layer and the metronome setting.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1188-1207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1188-L1207"
     }
    ]
   },
   {
    "mode": "synth_env",
    "gesture": "shows",
    "action": "Shows the ENV page with its four control cards and page-specific display.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_env_dest",
    "gesture": "shows",
    "action": "Shows the ENV DEST page with its four control cards and page-specific display.",
    "short_label": "ENV DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_lfo",
    "gesture": "shows",
    "action": "Shows the LFO page with its four control cards and page-specific display.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_lfo_dest",
    "gesture": "shows",
    "action": "Shows the LFO DEST page with its four control cards and page-specific display.",
    "short_label": "LFO DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_mod",
    "gesture": "shows",
    "action": "Shows the MOD page with its four control cards and page-specific display.",
    "short_label": "MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_fx",
    "gesture": "shows",
    "action": "Shows the FX page with its four control cards and page-specific display.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_slicer",
    "gesture": "shows",
    "action": "Shows the SLICER page with its four control cards and page-specific display.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_dly",
    "gesture": "shows",
    "action": "Shows the DLY page with its four control cards and page-specific display.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_reverb",
    "gesture": "shows",
    "action": "Shows the REVERB page with its four control cards and page-specific display.",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_chorus",
    "gesture": "shows",
    "action": "Shows the CHORUS page with its four control cards and page-specific display.",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_scl",
    "gesture": "shows",
    "action": "Shows the SCL page with its four control cards and page-specific display.",
    "short_label": "SCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_chord",
    "gesture": "shows",
    "action": "Shows the CHORD page with its four control cards and page-specific display.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "shows",
    "action": "Shows the SLICES page with its four control cards and page-specific display.",
    "short_label": "SLICES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "320",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L320"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_voice",
    "gesture": "shows",
    "action": "Shows the VOICE page with its four control cards and page-specific display.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L326"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_voice_2",
    "gesture": "shows",
    "action": "Shows the VOICE 2 page with its four control cards and page-specific display.",
    "short_label": "VOICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_global",
    "gesture": "shows",
    "action": "Shows the GLOBAL page with its four control cards and page-specific display.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_system",
    "gesture": "shows",
    "action": "Shows the SYSTEM page with its four control cards and page-specific display.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_presets",
    "gesture": "shows",
    "action": "Shows the PRESETS page with its four control cards and page-specific display.",
    "short_label": "PRESETS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "330",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L330"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "shows",
    "action": "Shows the USER page with its four control cards and page-specific display.",
    "short_label": "USER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "331",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L331"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "shows",
    "action": "Shows the PROJECT page with its four control cards and page-specific display.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "332",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L332"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "shows",
    "action": "Shows the TOOLS page with its four control cards and page-specific display.",
    "short_label": "TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "333",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L333"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_arp",
    "gesture": "shows",
    "action": "Shows the ARP page with its four control cards and page-specific display.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "334",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L334"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_arp_2",
    "gesture": "shows",
    "action": "Shows the ARP 2 page with its four control cards and page-specific display.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "335",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L335"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "shows",
    "action": "Shows the STEP page with its four control cards and page-specific display.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "336",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L336"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_pattern",
    "gesture": "shows",
    "action": "Shows the PATTERN page with its four control cards and page-specific display.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "337",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L337"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "shows",
    "action": "Shows the PHRASES page with its four control cards and page-specific display.",
    "short_label": "PHRASES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_mixer",
    "gesture": "shows",
    "action": "Shows the MIXER page with its four control cards and page-specific display.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "339",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L339"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "shows",
    "action": "Shows the SONG page with its four control cards and page-specific display.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "340",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L340"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_chance",
    "gesture": "shows",
    "action": "Shows the CHANCE page with its four control cards and page-specific display.",
    "short_label": "CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "341",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L341"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "shows",
    "action": "Shows the MOTION page with its four control cards and page-specific display.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "342",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L342"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "489-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L489-L606"
     }
    ]
   },
   {
    "mode": "synth_home_drum",
    "gesture": "shows",
    "action": "Shows DRUM with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     }
    ]
   },
   {
    "mode": "synth_edit1_drum",
    "gesture": "shows",
    "action": "Shows DRUM with its KIT controls.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     }
    ]
   },
   {
    "mode": "synth_edit2_drum",
    "gesture": "shows",
    "action": "Shows DRUM with its HIT controls.",
    "short_label": "HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     }
    ]
   },
   {
    "mode": "synth_home_analog",
    "gesture": "shows",
    "action": "Shows ANALOG with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     }
    ]
   },
   {
    "mode": "synth_edit1_analog",
    "gesture": "shows",
    "action": "Shows ANALOG with its OSC controls.",
    "short_label": "OSC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     }
    ]
   },
   {
    "mode": "synth_edit2_analog",
    "gesture": "shows",
    "action": "Shows ANALOG with its FLT controls.",
    "short_label": "FLT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     }
    ]
   },
   {
    "mode": "synth_home_trio",
    "gesture": "shows",
    "action": "Shows TRIO with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     }
    ]
   },
   {
    "mode": "synth_edit1_trio",
    "gesture": "shows",
    "action": "Shows TRIO with its OSC controls.",
    "short_label": "OSC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     }
    ]
   },
   {
    "mode": "synth_edit2_trio",
    "gesture": "shows",
    "action": "Shows TRIO with its TONE controls.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     }
    ]
   },
   {
    "mode": "synth_home_lofi",
    "gesture": "shows",
    "action": "Shows LOFI with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     }
    ]
   },
   {
    "mode": "synth_edit1_lofi",
    "gesture": "shows",
    "action": "Shows LOFI with its CHIP controls.",
    "short_label": "CHIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     }
    ]
   },
   {
    "mode": "synth_edit2_lofi",
    "gesture": "shows",
    "action": "Shows LOFI with its MOTN controls.",
    "short_label": "MOTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     }
    ]
   },
   {
    "mode": "synth_home_noise",
    "gesture": "shows",
    "action": "Shows NOISE with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     }
    ]
   },
   {
    "mode": "synth_edit1_noise",
    "gesture": "shows",
    "action": "Shows NOISE with its SRC controls.",
    "short_label": "SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     }
    ]
   },
   {
    "mode": "synth_edit2_noise",
    "gesture": "shows",
    "action": "Shows NOISE with its MOVE controls.",
    "short_label": "MOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     }
    ]
   },
   {
    "mode": "synth_home_fm6",
    "gesture": "shows",
    "action": "Shows FM6 with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     }
    ]
   },
   {
    "mode": "synth_edit1_fm6",
    "gesture": "shows",
    "action": "Shows FM6 with its OPS controls.",
    "short_label": "OPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     }
    ]
   },
   {
    "mode": "synth_edit2_fm6",
    "gesture": "shows",
    "action": "Shows FM6 with its PATCH controls.",
    "short_label": "PATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     }
    ]
   },
   {
    "mode": "synth_home_sample",
    "gesture": "shows",
    "action": "Shows SAMPLE with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     }
    ]
   },
   {
    "mode": "synth_edit1_sample",
    "gesture": "shows",
    "action": "Shows SAMPLE with its SET controls.",
    "short_label": "SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     }
    ]
   },
   {
    "mode": "synth_edit2_sample",
    "gesture": "shows",
    "action": "Shows SAMPLE with its TONE controls.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     }
    ]
   },
   {
    "mode": "synth_home_slice",
    "gesture": "shows",
    "action": "Shows SLICE with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     }
    ]
   },
   {
    "mode": "synth_edit1_slice",
    "gesture": "shows",
    "action": "Shows SLICE with its SLCE controls.",
    "short_label": "SLCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     }
    ]
   },
   {
    "mode": "synth_edit2_slice",
    "gesture": "shows",
    "action": "Shows SLICE with its PLAY controls.",
    "short_label": "PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     }
    ]
   },
   {
    "mode": "synth_home_chord",
    "gesture": "shows",
    "action": "Shows CHORD with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     }
    ]
   },
   {
    "mode": "synth_edit1_chord",
    "gesture": "shows",
    "action": "Shows CHORD with its VOICE controls.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     }
    ]
   },
   {
    "mode": "synth_edit2_chord",
    "gesture": "shows",
    "action": "Shows CHORD with its FM controls.",
    "short_label": "FM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     }
    ]
   },
   {
    "mode": "synth_home_wheel",
    "gesture": "shows",
    "action": "Shows WHEEL with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     }
    ]
   },
   {
    "mode": "synth_edit1_wheel",
    "gesture": "shows",
    "action": "Shows WHEEL with its BARS controls.",
    "short_label": "BARS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     }
    ]
   },
   {
    "mode": "synth_edit2_wheel",
    "gesture": "shows",
    "action": "Shows WHEEL with its TONE controls.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     }
    ]
   },
   {
    "mode": "synth_home_voice",
    "gesture": "shows",
    "action": "Shows VOICE with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     }
    ]
   },
   {
    "mode": "synth_edit1_voice",
    "gesture": "shows",
    "action": "Shows VOICE with its VOWL controls.",
    "short_label": "VOWL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     }
    ]
   },
   {
    "mode": "synth_edit2_voice",
    "gesture": "shows",
    "action": "Shows VOICE with its TONE controls.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     }
    ]
   },
   {
    "mode": "synth_home_phys",
    "gesture": "shows",
    "action": "Shows PHYS with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     }
    ]
   },
   {
    "mode": "synth_edit1_phys",
    "gesture": "shows",
    "action": "Shows PHYS with its BODY controls.",
    "short_label": "BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     }
    ]
   },
   {
    "mode": "synth_edit2_phys",
    "gesture": "shows",
    "action": "Shows PHYS with its EXCT controls.",
    "short_label": "EXCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     }
    ]
   },
   {
    "mode": "synth_home_grain",
    "gesture": "shows",
    "action": "Shows GRAIN with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     }
    ]
   },
   {
    "mode": "synth_edit1_grain",
    "gesture": "shows",
    "action": "Shows GRAIN with its GRAN controls.",
    "short_label": "GRAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     }
    ]
   },
   {
    "mode": "synth_edit2_grain",
    "gesture": "shows",
    "action": "Shows GRAIN with its SPRY controls.",
    "short_label": "SPRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     }
    ]
   },
   {
    "mode": "synth_home_phase",
    "gesture": "shows",
    "action": "Shows PHASE with its HOME controls.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     }
    ]
   },
   {
    "mode": "synth_edit1_phase",
    "gesture": "shows",
    "action": "Shows PHASE with its PHS controls.",
    "short_label": "PHS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     }
    ]
   },
   {
    "mode": "synth_edit2_phase",
    "gesture": "shows",
    "action": "Shows PHASE with its LINE controls.",
    "short_label": "LINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "shows",
    "action": "Shows the drum grid with the selected lane, step cursor and playback position.",
    "short_label": "DRUM GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "205-212",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L205-L212"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "shows",
    "action": "Shows the FX HOLD shortcut map and four knob cards.",
    "short_label": "FX HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "487-565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L487-L565"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "shows",
    "action": "Shows the GLO SET shortcut map and four knob cards.",
    "short_label": "GLO SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "487-565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L487-L565"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "shows",
    "action": "Shows the SCL SET shortcut map and four knob cards.",
    "short_label": "SCL SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "487-565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L487-L565"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "shows",
    "action": "Shows the EDIT SET shortcut map and four knob cards.",
    "short_label": "EDIT SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "487-565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L487-L565"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "shows",
    "action": "Shows the slot, twelve-character name field, typing groups and editing shortcuts.",
    "short_label": "NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "287-293",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L287-L293"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "shows",
    "action": "Asks whether to replace user slot.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "shows",
    "action": "Asks whether to replace project.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "shows",
    "action": "Asks whether to erase user slot.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "shows",
    "action": "Asks whether to replace sequence.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "shows",
    "action": "Asks whether to clear motion.",
    "short_label": "CLEAR MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "shows",
    "action": "Asks whether to delete song row.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "shows",
    "action": "Asks whether to clear song order.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "shows",
    "action": "Asks whether to initialize sound.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "shows",
    "action": "Asks whether to clear sequence.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "708-758",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L708-L758"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "shows",
    "action": "Shows COLOR, SPEAKER, HOLD, LEDS, CALIBRATION, ABOUT and BACK.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "7-8",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L7-L8"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "shows",
    "action": "Shows the Felucca version page, credits and licence notices.",
    "short_label": "ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "108-140",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L108-L140"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "shows",
    "action": "Prompts for each button, then asks for clockwise turns of each encoder.",
    "short_label": "CALIBRATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "964-982",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L964-L982"
     }
    ]
   },
   {
    "mode": "synth_factory_reset",
    "gesture": "shows",
    "action": "Shows a three-second erasure countdown while HOME and SAVE remain held.",
    "short_label": "RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "115-137",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L115-L137"
     }
    ]
   },
   {
    "mode": "synth_update",
    "gesture": "shows",
    "action": "Shows the update countdown and then UBOOT when the bootloader is entered.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "242-268",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L242-L268"
     }
    ]
   },
   {
    "mode": "synth_recording",
    "gesture": "shows",
    "action": "Shows the record indicator while one or more tracks are armed.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "30-35",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L30-L35"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_draw.c",
      "lines": "175-181",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_draw.c#L175-L181"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "shows",
    "short_label": "KEY LEGEND",
    "action": "On the PLAY, STRUM, LEAD, DRONE, ARP or REPEAT home view, shows degree numbers, strumplate bars, I/L/H marks and direction dots when no key is held or latched, or held keys have no chord or LEAD notes to display, including after DRONE keys are released while the chord keeps ringing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1445-1490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1445-L1490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1393-1398",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1393-L1398"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1335-1339",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1335-L1339"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "1446-1450",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1446-L1450"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "shows",
    "short_label": "HEADER",
    "action": "Shows key, scale, nonzero octave, mode, BPM, USB status and battery, with temporary value or status messages replacing the header.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "915-950",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L915-L950"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "KEY MENU",
    "action": "Opens or closes the KEY menu.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "721",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L721"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens the last SCL page visited, or advances through that family when it is already open.",
    "short_label": "SCL PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "635-658",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L635-L658"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "Opens the SCL SET shortcut map after the menu’s 0.3 to 0.6 second hold time, saving its first-use hint state without a question once stopped.",
    "short_label": "SCL SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-142",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L142"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "release",
    "action": "Closes the held layer after its shortcut keys are released.",
    "short_label": "CLOSE LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "121-153",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L121-L153"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "SOUND MENU",
    "action": "Opens or closes the SOUND menu.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "722",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L722"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens the last FX page visited, or advances through that family when it is already open.",
    "short_label": "FX PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "635-658",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L635-L658"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "Opens the FX HOLD shortcut map after the menu’s 0.3 to 0.6 second hold time, saving its first-use hint state without a question once stopped.",
    "short_label": "FX HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-142",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L142"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Closes the held layer after its shortcut keys are released.",
    "short_label": "CLOSE LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "121-153",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L121-L153"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "SOUND MENU",
    "action": "Opens or closes the SOUND menu.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "722",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L722"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens MIXER, then cycles through GLOBAL and SYSTEM on further taps.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "327-342",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L327-L342"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "Opens the GLO SET shortcut map after the menu’s 0.3 to 0.6 second hold time, saving its first-use hint state without a question once stopped.",
    "short_label": "GLO SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-142",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L142"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "release",
    "action": "Closes the held layer after its shortcut keys are released.",
    "short_label": "CLOSE LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "121-153",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L121-L153"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "MODE MENU",
    "action": "Opens or closes MODE and counts tempo taps, setting tempo from the third tap when successive gaps stay within 1.5 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "723-726",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L723-L726"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "669-685",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L669-L685"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens the last EDIT page visited, or advances through that family when it is already open.",
    "short_label": "EDIT PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "635-658",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L635-L658"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "release",
    "action": "Opens naming for the selected stored user slot; confirming the name while stopped writes that name immediately without changing its sound or pattern.",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "650-652",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L650-L652"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "release",
    "action": "Opens naming for the selected saved project; confirming while stopped writes its name immediately and leaves its contents intact.",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "650-652",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L650-L652"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Clears the cursor step and advances, without a question, flash write or dedicated undo.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "643-648",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L643-L648"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "Opens the EDIT SET shortcut map after the menu’s 0.3 to 0.6 second hold time, saving its first-use hint state without a question once stopped.",
    "short_label": "EDIT SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-142",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L142"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "release",
    "action": "Closes the held layer after its shortcut keys are released.",
    "short_label": "CLOSE LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "121-153",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L121-L153"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "ENV LIST",
    "action": "Opens the envelope list, or returns home if that list is already open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "733-740",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L733-L740"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens the last ENV page visited, or advances through that family when it is already open.",
    "short_label": "ENV PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "635-658",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L635-L658"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "LFO LIST",
    "action": "Opens the vibrato list, or returns home if that list is already open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "741-748",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L741-L748"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens the last LFO page visited, or advances through that family when it is already open.",
    "short_label": "LFO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "635-658",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L635-L658"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "ARP MODE",
    "action": "Switches ARP to PLAY or any other play mode to ARP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "749-752",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L749-L752"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens the last ARP page visited, or advances through that family when it is already open.",
    "short_label": "ARP PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "635-658",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L635-L658"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "LOOPER MENU",
    "action": "Opens or closes the LOOPER menu.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "858-859",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L858-L859"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens or advances through STEP, PATTERN, PHRASES, SONG, CHANCE and MOTION.",
    "short_label": "SEQ PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "847-852",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L847-L852"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "336-342",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L336-L342"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "Opens SONG after holding for 0.7 seconds.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "603-617",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L603-L617"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "847-849",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L847-L849"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "chord_ui",
    "gesture": "release",
    "short_label": "HOME",
    "action": "Returns to the home screen after a short press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "717-720",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L717-L720"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "603-617",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L603-L617"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "long_press",
    "short_label": "SYNTH UI",
    "action": "Opens the underlying synth interface after more than 0.7 seconds.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "710-715",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L710-L715"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "603-617",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L603-L617"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Returns to the synth HOME page after a short tap.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "847-854",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L847-L854"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "Opens or closes the synth menu after holding for 0.7 seconds.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "603-617",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L603-L617"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "750-760",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L750-L760"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_save",
    "action": "Holding HOME and SAVE for three seconds after power-on erases saved settings, P1 to P4 snapshots, projects, user sounds and the FM6 bank, resets calibration and reboots without undo; uploaded samples remain.",
    "short_label": "RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "97-137",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L97-L137"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/storage.c",
      "lines": "121-132",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/storage.c#L121-L132"
     }
    ]
   },
   {
    "mode": "synth_factory_reset",
    "gesture": "release",
    "action": "Cancels the countdown and continues startup without erasing stored work.",
    "short_label": "CANCEL RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "123-136",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L123-L136"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "PRESETS",
    "action": "Opens PRESETS unless that menu was already showing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "727-732",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L727-L732"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "press",
    "short_label": "SAVE PRESET",
    "action": "Immediately replaces the selected shared slot P1/A, P2/B, P3/C or P4/D and its chord settings while the synth transport is stopped, without a question or undo, and saving P1, P2 or P3 also damages the next preset’s chord settings while P4 writes beyond its working storage; chord-sequence steps and looper recordings are excluded.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "304-320",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L304-L320"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "727-731",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L727-L731"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "651-674",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L651-L674"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "233-266",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "78-99",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/settings_persist.c",
      "lines": "10-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "304-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L304-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "679-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L679-L704"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press_while_holding:button_home",
    "action": "Returns to the chord interface.",
    "short_label": "CHORD UI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "691-694",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L691-L694"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Opens USER for saving a sound, then cycles through the save pages on further taps.",
    "short_label": "SAVE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "304-324",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L304-L324"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "long_press",
    "action": "After 0.7 seconds, swaps the last sound or phrase load with its undo copy, preserving later edits outside that load and leaving saved slots unchanged.",
    "short_label": "UNDO / REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "363-370",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L363-L370"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "787-792",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L787-L792"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing while this shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "725-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L725-L738"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "19-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L19-L23"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_factory_reset",
    "gesture": "release",
    "action": "Cancels the countdown and continues startup without erasing stored work.",
    "short_label": "CANCEL RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "123-136",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L123-L136"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "chord_ui",
    "gesture": "turn",
    "short_label": "PLAY MODE",
    "action": "Chooses a play mode with wrapping and briefly shows its list; entering DRUM LOOP starts the loop.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "790-793",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L793"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "turn",
    "action": "Selects track 1 to 4.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "932-933",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L932-L933"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L266-L269"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "chord_ui",
    "gesture": "turn",
    "short_label": "SOUND",
    "action": "Chooses one of 38 sounds with wrapping, resets its envelope and attack/release overrides, and briefly shows the sound list.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "794-797",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L794-L797"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "203-215",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L203-L215"
     }
    ]
   },
   {
    "mode": "synth_home",
    "gesture": "turn",
    "action": "Loads the next or previous sound across engines and used user slots, preserving the pattern; holding SAVE can undo the browse.",
    "short_label": "BROWSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "926-931",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L926-L931"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "363-370",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L363-L370"
     }
    ]
   },
   {
    "mode": "synth_presets",
    "gesture": "turn",
    "action": "Loads the next or previous sound, preserving the pattern and allowing SAVE-held undo.",
    "short_label": "BROWSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "926-931",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L926-L931"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "turn",
    "action": "Does nothing while a shortcut layer is held.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "737-738",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L737-L738"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L266-L269"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "turn",
    "action": "Moves through the menu choices.",
    "short_label": "MENU CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L269"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Scrolls the information and credits.",
    "short_label": "SCROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "270-272",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L270-L272"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "turn",
    "action": "Does nothing on synth pages other than HOME and PRESETS, where it browses sounds.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "926-931",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L926-L931"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "chord_ui",
    "gesture": "turn",
    "short_label": "CUTOFF",
    "action": "Changes cutoff by three steps per click and turns the filter on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "798-803",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L798-L803"
     }
    ]
   },
   {
    "mode": "synth_env",
    "gesture": "turn",
    "action": "Changes the envelope attack time.",
    "short_label": "ATK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L48"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_env_dest",
    "gesture": "turn",
    "action": "Changes the envelope amount to the filter.",
    "short_label": "FLT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L52"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo",
    "gesture": "turn",
    "action": "Changes the LFO speed.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L56"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo_dest",
    "gesture": "turn",
    "action": "Changes the LFO pitch depth.",
    "short_label": "PIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "60",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L60"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_fx",
    "gesture": "turn",
    "action": "Changes the distortion amount.",
    "short_label": "DST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L80"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_slicer",
    "gesture": "turn",
    "action": "Changes the slicer mode.",
    "short_label": "SLCR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L92"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_dly",
    "gesture": "turn",
    "action": "Changes the delay division.",
    "short_label": "TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "119",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L119"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_reverb",
    "gesture": "turn",
    "action": "Changes the reverb model.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "140",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L140"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chorus",
    "gesture": "turn",
    "action": "Changes the chorus rate.",
    "short_label": "CRT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "125",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L125"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_scl",
    "gesture": "turn",
    "action": "Changes the scale root.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "72",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L72"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chord",
    "gesture": "turn",
    "action": "Changes the one-key chord type.",
    "short_label": "CHRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "110",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L110"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice",
    "gesture": "turn",
    "action": "Changes the voice mode.",
    "short_label": "VCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L84"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L326"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice_2",
    "gesture": "turn",
    "action": "Changes the voice allocation.",
    "short_label": "ALLOC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L88"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_global",
    "gesture": "turn",
    "action": "Changes the tempo.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_system",
    "gesture": "turn",
    "action": "Changes the MIDI input source.",
    "short_label": "MIDI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "127",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L127"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp",
    "gesture": "turn",
    "action": "Changes the arpeggiator mode.",
    "short_label": "MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "64",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L64"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "334",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L334"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp_2",
    "gesture": "turn",
    "action": "Changes the arpeggiator swing.",
    "short_label": "SWG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "68",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L68"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "335",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L335"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_pattern",
    "gesture": "turn",
    "action": "Changes the pattern length.",
    "short_label": "LEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "337",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L337"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_mod",
    "gesture": "turn",
    "action": "Selects modulation slot 1 to 4.",
    "short_label": "SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "443-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L443-L452"
     }
    ]
   },
   {
    "mode": "synth_home_drum",
    "gesture": "turn",
    "action": "Changes the DRUM TUNE setting.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_drum",
    "gesture": "turn",
    "action": "Changes the DRUM KIT setting.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_drum",
    "gesture": "turn",
    "action": "Changes the DRUM SNAP setting.",
    "short_label": "SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG CUT setting.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG CUT setting.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_trio",
    "gesture": "turn",
    "action": "Changes the TRIO CUT setting.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_trio",
    "gesture": "turn",
    "action": "Changes the TRIO WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_trio",
    "gesture": "turn",
    "action": "Changes the TRIO MODE setting.",
    "short_label": "MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit1_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI CHIP setting.",
    "short_label": "CHIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit2_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI SWP setting.",
    "short_label": "SWP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_home_noise",
    "gesture": "turn",
    "action": "Changes the NOISE FREQ setting.",
    "short_label": "FREQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit1_noise",
    "gesture": "turn",
    "action": "Changes the NOISE MODE setting.",
    "short_label": "MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit2_noise",
    "gesture": "turn",
    "action": "Changes the NOISE TRK setting.",
    "short_label": "TRK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_home_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 MLVL setting.",
    "short_label": "MLVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 ALG setting.",
    "short_label": "ALG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 MEG setting.",
    "short_label": "MEG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE SET setting.",
    "short_label": "SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE SET setting.",
    "short_label": "SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE CUT setting.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_slice",
    "gesture": "turn",
    "action": "Changes the SLICE SRC setting.",
    "short_label": "SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_slice",
    "gesture": "turn",
    "action": "Changes the SLICE SRC setting.",
    "short_label": "SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_slice",
    "gesture": "turn",
    "action": "Changes the SLICE MODE setting.",
    "short_label": "MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_chord",
    "gesture": "turn",
    "action": "Changes the CHORD WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_chord",
    "gesture": "turn",
    "action": "Changes the CHORD WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_chord",
    "gesture": "turn",
    "action": "Changes the CHORD DEPTH setting.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL REG setting.",
    "short_label": "REG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL REG setting.",
    "short_label": "REG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL PERC setting.",
    "short_label": "PERC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_voice",
    "gesture": "turn",
    "action": "Changes the VOICE VOWL setting.",
    "short_label": "VOWL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_voice",
    "gesture": "turn",
    "action": "Changes the VOICE VOWL setting.",
    "short_label": "VOWL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_voice",
    "gesture": "turn",
    "action": "Changes the VOICE BUZZ setting.",
    "short_label": "BUZZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phys",
    "gesture": "turn",
    "action": "Changes PHYS structure, membrane harmonics in MEMB, or the sympathetic chord in SYMP.",
    "short_label": "STRUCTURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit1_phys",
    "gesture": "turn",
    "action": "Changes the PHYS MODEL setting.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit2_phys",
    "gesture": "turn",
    "action": "Changes PHYS excitation position, or sympathetic resonance in SYMP.",
    "short_label": "POS / SYMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_home_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN POS setting.",
    "short_label": "POS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN SRC setting.",
    "short_label": "SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN PTCH setting.",
    "short_label": "PTCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phase",
    "gesture": "turn",
    "action": "Changes the PHASE DCW setting.",
    "short_label": "DCW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_phase",
    "gesture": "turn",
    "action": "Changes the PHASE WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_phase",
    "gesture": "turn",
    "action": "Changes the PHASE DTN setting.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_mixer",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-233",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L207-L233"
     }
    ]
   },
   {
    "mode": "synth_presets",
    "gesture": "turn",
    "action": "Loads a sound from the combined factory and user list, leaving the pattern in place and keeping an undo copy.",
    "short_label": "BROWSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "407-418",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L407-L418"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "turn",
    "action": "Selects the user slot.",
    "short_label": "USER SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-436",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L436"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "turn",
    "action": "Selects project A to D.",
    "short_label": "PROJECT SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L452"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "turn",
    "action": "Selects clearing the selected track’s steps and motion; OCT+ asks before clearing working memory, and SAVE-held undo can restore it.",
    "short_label": "CLEAR STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "467-475",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L467-L475"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "317-351",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L317-L351"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "277-287",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L277-L287"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "turn",
    "action": "Chooses a factory phrase or a user slot’s stored phrase.",
    "short_label": "PHRASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-441",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L441"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "turn",
    "action": "Selects a song row or the empty row after the current order.",
    "short_label": "ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "374-394",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L374-L394"
     }
    ]
   },
   {
    "mode": "synth_chance",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "359-366",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L359-L366"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "turn",
    "action": "Enables motion playback clockwise or disables it counterclockwise.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "368-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L368-L373"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "turn",
    "action": "Selects a slice-start marker or END.",
    "short_label": "SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "127-193",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L127-L193"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Sweeps a temporary low-pass filter left or high-pass filter right; releasing FX resets the macro.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "252-258",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L252-L258"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Changes track 1 level and records the change when motion recording is armed.",
    "short_label": "T1 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-261",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L258-L261"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Changes the scale root.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "39-40",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L39-L40"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "269-278",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L269-L278"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Loads the next or previous engine’s first sound, keeping a sound undo copy.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "262-268",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L262-L268"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "857-863",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L857-L863"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Moves the naming cursor.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "193-203",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L193-L203"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_menu_color",
    "gesture": "turn",
    "action": "Changes the screen palette.",
    "short_label": "COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "274-278",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L274-L278"
     }
    ]
   },
   {
    "mode": "synth_menu_speaker",
    "gesture": "turn",
    "action": "Chooses OFF, LOWCUT or BASS+ speaker filtering.",
    "short_label": "SPEAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "279-285",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L279-L285"
     }
    ]
   },
   {
    "mode": "synth_menu_hold",
    "gesture": "turn",
    "action": "Changes shortcut hold time from 0.3 to 0.6 seconds.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "286-291",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L286-L291"
     }
    ]
   },
   {
    "mode": "synth_menu_leds",
    "gesture": "turn",
    "action": "Chooses dim idle lights or inverted active lights.",
    "short_label": "LEDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "292-296",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L292-L296"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Does nothing on the information screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "273-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L273-L318"
     }
    ]
   },
   {
    "mode": "synth_recording",
    "gesture": "turn",
    "action": "Changes its current page parameter and records eligible motion on the selected track, with one shared limit of 64 events; a full pool rejects new events and reports MOTION FULL.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/motion.c",
      "lines": "111-162",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/motion.c#L111-L162"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/core.h",
      "lines": "219-222",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/core.h#L219-L222"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "662-665",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L662-L665"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "chord_ui",
    "gesture": "turn",
    "short_label": "RESONANCE",
    "action": "Changes resonance by three steps per click and turns the filter on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "804-809",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L804-L809"
     }
    ]
   },
   {
    "mode": "synth_env",
    "gesture": "turn",
    "action": "Changes the envelope decay time.",
    "short_label": "DEC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "49",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L49"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_env_dest",
    "gesture": "turn",
    "action": "Changes the envelope amount to pitch.",
    "short_label": "PIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "53",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L53"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo",
    "gesture": "turn",
    "action": "Changes the LFO waveform.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "57",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L57"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo_dest",
    "gesture": "turn",
    "action": "Changes the LFO filter depth.",
    "short_label": "FLT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L61"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_fx",
    "gesture": "turn",
    "action": "Changes the chorus send.",
    "short_label": "CHO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "81",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L81"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_slicer",
    "gesture": "turn",
    "action": "Changes the slicer pattern.",
    "short_label": "PAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "93",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L93"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_dly",
    "gesture": "turn",
    "action": "Changes the delay feedback.",
    "short_label": "FDBK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L120"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_reverb",
    "gesture": "turn",
    "action": "Changes the reverb size.",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L123"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chorus",
    "gesture": "turn",
    "action": "Changes the chorus depth.",
    "short_label": "CDP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "126",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L126"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_scl",
    "gesture": "turn",
    "action": "Changes the scale.",
    "short_label": "SCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chord",
    "gesture": "turn",
    "action": "Changes the chord voicing.",
    "short_label": "VOIC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "111",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L111"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice",
    "gesture": "turn",
    "action": "Changes the glide time.",
    "short_label": "GLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L85"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L326"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice_2",
    "gesture": "turn",
    "action": "Changes the voice detuning.",
    "short_label": "DTUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L89"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_global",
    "gesture": "turn",
    "action": "Changes the global swing.",
    "short_label": "SWG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "116",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L116"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_system",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "128",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L128"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp",
    "gesture": "turn",
    "action": "Changes the arpeggiator rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "65",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L65"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "334",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L334"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp_2",
    "gesture": "turn",
    "action": "Changes the arpeggiator probability.",
    "short_label": "PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "69",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L69"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "335",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L335"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_pattern",
    "gesture": "turn",
    "action": "Changes the pattern division.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L77"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "337",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L337"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_mod",
    "gesture": "turn",
    "action": "Chooses the selected modulation slot’s source.",
    "short_label": "SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "443-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L443-L452"
     }
    ]
   },
   {
    "mode": "synth_home_drum",
    "gesture": "turn",
    "action": "Changes the DRUM TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_drum",
    "gesture": "turn",
    "action": "Changes the DRUM TUNE setting.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_drum",
    "gesture": "turn",
    "action": "Changes the DRUM ACC setting.",
    "short_label": "ACC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG RES setting.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG DTN setting.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG RES setting.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_trio",
    "gesture": "turn",
    "action": "Changes the TRIO RES setting.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_trio",
    "gesture": "turn",
    "action": "Changes the TRIO INT2 setting.",
    "short_label": "INT2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_trio",
    "gesture": "turn",
    "action": "Changes the TRIO CUT setting.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI pulse duty, or selects a waveform table when WAVE is WRAM.",
    "short_label": "DUTY / WAV#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit1_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI WAVE setting.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit2_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI VIB setting.",
    "short_label": "VIB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_home_noise",
    "gesture": "turn",
    "action": "Changes the NOISE RES setting.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit1_noise",
    "gesture": "turn",
    "action": "Changes the NOISE COLR setting.",
    "short_label": "COLR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit2_noise",
    "gesture": "turn",
    "action": "Changes NOISE density, or the register length in LFSR and META modes.",
    "short_label": "DENS / LEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_home_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 MRAT setting.",
    "short_label": "MRAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 FB setting.",
    "short_label": "FB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 VMOD setting.",
    "short_label": "VMOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE CUT setting.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE TUNE setting.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_sample",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_slice",
    "gesture": "turn",
    "action": "Changes the SLICE DIV setting.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_slice",
    "gesture": "turn",
    "action": "Changes the SLICE DIV setting.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_slice",
    "gesture": "turn",
    "action": "Changes the SLICE REV setting.",
    "short_label": "REV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_chord",
    "gesture": "turn",
    "action": "Changes the CHORD TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_chord",
    "gesture": "turn",
    "action": "Changes the CHORD BASS setting.",
    "short_label": "BASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_chord",
    "gesture": "turn",
    "action": "Changes the CHORD DECAY setting.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL PERC setting.",
    "short_label": "PERC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL SUB setting.",
    "short_label": "SUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL CLICK setting.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_voice",
    "gesture": "turn",
    "action": "Changes the VOICE BUZZ setting.",
    "short_label": "BUZZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_voice",
    "gesture": "turn",
    "action": "Changes the VOICE VOWL2 setting.",
    "short_label": "VOWL2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_voice",
    "gesture": "turn",
    "action": "Changes the VOICE BRTH setting.",
    "short_label": "BRTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phys",
    "gesture": "turn",
    "action": "Changes the PHYS BRIT setting.",
    "short_label": "BRIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit1_phys",
    "gesture": "turn",
    "action": "Changes PHYS structure, membrane harmonics in MEMB, or the sympathetic chord in SYMP.",
    "short_label": "STRUCTURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit2_phys",
    "gesture": "turn",
    "action": "Changes the PHYS ACC setting.",
    "short_label": "ACC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_home_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN SIZE setting.",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN POS setting.",
    "short_label": "POS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN SPRD setting.",
    "short_label": "SPRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phase",
    "gesture": "turn",
    "action": "Changes the PHASE ENV setting.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_phase",
    "gesture": "turn",
    "action": "Changes the PHASE WAVE2 setting.",
    "short_label": "WAVE2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_phase",
    "gesture": "turn",
    "action": "Changes the PHASE LINE setting.",
    "short_label": "LINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_mixer",
    "gesture": "turn",
    "action": "Changes the selected track’s pan.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-233",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L207-L233"
     }
    ]
   },
   {
    "mode": "synth_presets",
    "gesture": "turn",
    "action": "Loads the next or previous engine’s first sound, preserving the pattern and allowing SAVE-held undo.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "407-418",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L407-L418"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "turn",
    "action": "Selects LOAD clockwise or drops it counterclockwise; OCT+ loads only the sound, with SAVE-held undo.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-436",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L436"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L452"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "turn",
    "action": "Selects restoring the selected engine’s first sound; OCT+ asks first and SAVE-held undo can restore the previous sound.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "467-475",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L467-L475"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "turn",
    "action": "Transposes all notes at the cursor, or adds the last note if the step is empty.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "317-351",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L317-L351"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "turn",
    "action": "Selects drum lane 1 to 8.",
    "short_label": "LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "277-287",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L277-L287"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "turn",
    "action": "Leaves the phrase-load action selected for OCT+.",
    "short_label": "LOAD PHRASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-441",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L441"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "turn",
    "action": "Chooses project A to D for the row, creating a new row when needed.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "374-394",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L374-L394"
     }
    ]
   },
   {
    "mode": "synth_chance",
    "gesture": "turn",
    "action": "Changes the selected step’s probability from 0 to 100 percent.",
    "short_label": "CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "359-366",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L359-L366"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "368-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L368-L373"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "turn",
    "action": "Moves the marker for a loaded user sample; edits switch to MAN slicing and save without a question after leaving SLICES while stopped, with no SAVE-held undo.",
    "short_label": "POSITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "127-193",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L127-L193"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Changes temporary crushing; releasing FX resets the macro.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "252-258",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L252-L258"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Changes track 2 level and records the change when motion recording is armed.",
    "short_label": "T2 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-261",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L258-L261"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Changes the scale.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "39-40",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L39-L40"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "269-278",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L269-L278"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Loads another factory or user sound from the current engine, keeping a sound undo copy.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "262-268",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L262-L268"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "857-863",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L857-L863"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "901-934",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L901-L934"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Cycles the character at the cursor or adds one at the end.",
    "short_label": "CHARACTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "193-203",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L193-L203"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_recording",
    "gesture": "turn",
    "action": "Changes its current page parameter and records eligible motion on the selected track, with one shared limit of 64 events; a full pool rejects new events and reports MOTION FULL.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/motion.c",
      "lines": "111-162",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/motion.c#L111-L162"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/core.h",
      "lines": "219-222",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/core.h#L219-L222"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "662-665",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L662-L665"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "chord_ui",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Changes attack by two steps per click.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "810-814",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L810-L814"
     }
    ]
   },
   {
    "mode": "synth_env",
    "gesture": "turn",
    "action": "Changes the envelope sustain level.",
    "short_label": "SUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "50",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L50"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_env_dest",
    "gesture": "turn",
    "action": "Changes the envelope amount to shape.",
    "short_label": "SHP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "54",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L54"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo",
    "gesture": "turn",
    "action": "Changes the LFO phase.",
    "short_label": "PHS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "58",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L58"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo_dest",
    "gesture": "turn",
    "action": "Changes the LFO shape depth.",
    "short_label": "SHP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_fx",
    "gesture": "turn",
    "action": "Changes the delay send.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "82",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L82"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_slicer",
    "gesture": "turn",
    "action": "Changes the slicer rate.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "94",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L94"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_dly",
    "gesture": "turn",
    "action": "Changes the delay tone.",
    "short_label": "COLR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L121"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_reverb",
    "gesture": "turn",
    "action": "Changes the reverb damping.",
    "short_label": "DAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L124"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chorus",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_scl",
    "gesture": "turn",
    "action": "Changes the keyboard and sequence quantization.",
    "short_label": "QNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "74",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L74"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chord",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice",
    "gesture": "turn",
    "action": "Changes the glide mode.",
    "short_label": "GLMOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "86",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L86"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L326"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice_2",
    "gesture": "turn",
    "action": "Changes the pan position.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L90"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_global",
    "gesture": "turn",
    "action": "Changes the clock source.",
    "short_label": "CLK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L117"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_system",
    "gesture": "turn",
    "action": "Changes the MIDI channel routing.",
    "short_label": "ROUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp",
    "gesture": "turn",
    "action": "Changes the arpeggiator octave range.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "66",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L66"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "334",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L334"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp_2",
    "gesture": "turn",
    "action": "Changes the arpeggiator latch.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "70",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L70"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "335",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L335"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_pattern",
    "gesture": "turn",
    "action": "Changes the pattern swing.",
    "short_label": "SWG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L78"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "337",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L337"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_mod",
    "gesture": "turn",
    "action": "Chooses the selected modulation slot’s destination.",
    "short_label": "DESTINATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "443-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L443-L452"
     }
    ]
   },
   {
    "mode": "synth_home_drum",
    "gesture": "turn",
    "action": "Changes the DRUM DECY setting.",
    "short_label": "DECY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_drum",
    "gesture": "turn",
    "action": "Changes the DRUM TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_drum",
    "gesture": "turn",
    "action": "Changes the DRUM KICK setting.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_analog",
    "gesture": "turn",
    "action": "Changes the envelope attack time.",
    "short_label": "ATK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L48"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG MIX setting.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG DRV setting.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_trio",
    "gesture": "turn",
    "action": "Changes the TRIO PW setting.",
    "short_label": "PW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_trio",
    "gesture": "turn",
    "action": "Changes the TRIO INT3 setting.",
    "short_label": "INT3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_trio",
    "gesture": "turn",
    "action": "Changes the TRIO RES setting.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_lofi",
    "gesture": "turn",
    "action": "Changes LOFI crushing, or the chip envelope when CHIP is STEP.",
    "short_label": "CRUSH / DCY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit1_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI pulse duty, or selects a waveform table when WAVE is WRAM.",
    "short_label": "DUTY / WAV#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit2_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI ARP setting.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_home_noise",
    "gesture": "turn",
    "action": "Changes the NOISE COLR setting.",
    "short_label": "COLR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit1_noise",
    "gesture": "turn",
    "action": "Changes the NOISE FREQ setting.",
    "short_label": "FREQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit2_noise",
    "gesture": "turn",
    "action": "Changes the NOISE DRFT setting.",
    "short_label": "DRFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_home_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 MEG setting.",
    "short_label": "MEG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 MLVL setting.",
    "short_label": "MLVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 DTUN setting.",
    "short_label": "DTUN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_sample",
    "gesture": "turn",
    "action": "Changes the envelope attack time.",
    "short_label": "ATK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L48"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE BITS setting.",
    "short_label": "BITS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE DRV setting.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_slice",
    "gesture": "turn",
    "action": "Changes the SLICE PTCH setting.",
    "short_label": "PTCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_slice",
    "gesture": "turn",
    "action": "Changes the SLICE START setting.",
    "short_label": "START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_slice",
    "gesture": "turn",
    "action": "Changes the SLICE DCAY setting.",
    "short_label": "DCAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_chord",
    "gesture": "turn",
    "action": "Changes the envelope attack time.",
    "short_label": "ATK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L48"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_chord",
    "gesture": "turn",
    "action": "Changes the CHORD LAYR2 setting.",
    "short_label": "LAYR2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_chord",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL DRV setting.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL BODY setting.",
    "short_label": "BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL DRV setting.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_voice",
    "gesture": "turn",
    "action": "Changes the VOICE BRTH setting.",
    "short_label": "BRTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_voice",
    "gesture": "turn",
    "action": "Changes the VOICE TALK setting.",
    "short_label": "TALK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_voice",
    "gesture": "turn",
    "action": "Changes the VOICE Q setting.",
    "short_label": "Q",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phys",
    "gesture": "turn",
    "action": "Changes the PHYS DAMP setting.",
    "short_label": "DAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit1_phys",
    "gesture": "turn",
    "action": "Changes the PHYS BRIT setting.",
    "short_label": "BRIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit2_phys",
    "gesture": "turn",
    "action": "Changes PHYS bow strength, membrane bend in MEMB, or buzz in SYMP.",
    "short_label": "BOW / BEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_home_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN DENS setting.",
    "short_label": "DENS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN SIZE setting.",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN RAND setting.",
    "short_label": "RAND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phase",
    "gesture": "turn",
    "action": "Changes the PHASE DTN setting.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_phase",
    "gesture": "turn",
    "action": "Changes the PHASE DCW setting.",
    "short_label": "DCW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_phase",
    "gesture": "turn",
    "action": "Changes the PHASE SUB setting.",
    "short_label": "SUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_mixer",
    "gesture": "turn",
    "action": "Changes the selected track’s reverb send.",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-233",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L207-L233"
     }
    ]
   },
   {
    "mode": "synth_presets",
    "gesture": "turn",
    "action": "Marks the sound as a favorite clockwise or removes its mark counterclockwise, saving settings without a question once stopped.",
    "short_label": "FAVORITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "407-418",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L407-L418"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "turn",
    "action": "Selects ERASE clockwise or drops it counterclockwise; OCT+ asks before permanently erasing the chosen user slot while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-436",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L436"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "turn",
    "action": "Selects LOAD clockwise or drops it counterclockwise; OCT+ replaces the working project without a question or undo.",
    "short_label": "LOAD PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L452"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "760-806",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L760-L806"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "turn",
    "action": "Selects deleting the current song row; OCT+ asks before changing the working song order, with no undo.",
    "short_label": "DELETE ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "467-475",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L467-L475"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "turn",
    "action": "Chooses note, tie or rest at the cursor.",
    "short_label": "TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "317-351",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L317-L351"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "turn",
    "action": "Adds the selected lane’s hit clockwise or removes it counterclockwise at the cursor.",
    "short_label": "HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "277-287",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L277-L287"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-441",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L441"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "turn",
    "action": "Changes the row’s repeats from 1 to 16, creating a new row when needed.",
    "short_label": "REPEATS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "374-394",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L374-L394"
     }
    ]
   },
   {
    "mode": "synth_chance",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "359-366",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L359-L366"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "368-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L368-L373"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "turn",
    "action": "Selects splitting the current slice in half for OCT+; a full 32-slice table or a slice too short refuses the split.",
    "short_label": "SPLIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "127-193",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L127-L193"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Sends the mix into delay and reverb temporarily; releasing FX resets the macro.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "252-258",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L252-L258"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Changes track 3 level and records the change when motion recording is armed.",
    "short_label": "T3 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-261",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L258-L261"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Changes the one-key chord type.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "39-40",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L39-L40"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "269-278",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L269-L278"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Adds a favorite clockwise or removes it counterclockwise, saving settings without a question once stopped.",
    "short_label": "FAVORITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "262-268",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L262-L268"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "857-863",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L857-L863"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "193-203",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L193-L203"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_recording",
    "gesture": "turn",
    "action": "Changes its current page parameter and records eligible motion on the selected track, with one shared limit of 64 events; a full pool rejects new events and reports MOTION FULL.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/motion.c",
      "lines": "111-162",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/motion.c#L111-L162"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/core.h",
      "lines": "219-222",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/core.h#L219-L222"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "662-665",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L662-L665"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "chord_ui",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Changes release by two steps per click except on the five SOUND effect rows.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "815-823",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L815-L823"
     }
    ]
   },
   {
    "mode": "sound_menu_reverb",
    "gesture": "turn",
    "short_label": "REVERB AMT",
    "action": "Changes reverb amount by four steps within 1–127 and enables its first type if it was off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "141-177",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L141-L177"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "815-818",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L815-L818"
     }
    ]
   },
   {
    "mode": "sound_menu_delay",
    "gesture": "turn",
    "short_label": "DELAY AMT",
    "action": "Changes delay amount by four steps within 1–127 and enables its first type if it was off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "141-177",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L141-L177"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "815-818",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L815-L818"
     }
    ]
   },
   {
    "mode": "sound_menu_chorus",
    "gesture": "turn",
    "short_label": "CHORUS AMT",
    "action": "Changes chorus amount by four steps within 1–127 and enables its first type if it was off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "141-177",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L141-L177"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "815-818",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L815-L818"
     }
    ]
   },
   {
    "mode": "sound_menu_flanger",
    "gesture": "turn",
    "short_label": "FLANGER AMT",
    "action": "Changes flanger amount by four steps within 1–127 and enables its first type if it was off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "141-177",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L141-L177"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "815-818",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L815-L818"
     }
    ]
   },
   {
    "mode": "sound_menu_tremolo",
    "gesture": "turn",
    "short_label": "TREMOLO AMT",
    "action": "Changes tremolo amount by four steps within 1–127 and enables its first type if it was off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "141-177",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L141-L177"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "815-818",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L815-L818"
     }
    ]
   },
   {
    "mode": "synth_env",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "306",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L306"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_env_dest",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "307",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L307"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo",
    "gesture": "turn",
    "action": "Changes the LFO fade-in time.",
    "short_label": "FADE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "59",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L59"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_lfo_dest",
    "gesture": "turn",
    "action": "Changes the LFO volume depth.",
    "short_label": "AMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "63",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L63"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "309",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L309"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_fx",
    "gesture": "turn",
    "action": "Changes the reverb send.",
    "short_label": "REV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "83",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L83"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "311",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L311"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_slicer",
    "gesture": "turn",
    "action": "Changes the slicer depth.",
    "short_label": "DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "95",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L95"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "312",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L312"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_dly",
    "gesture": "turn",
    "action": "Changes the delay mix.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "122",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L122"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L313"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_reverb",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "314",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L314"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chorus",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "315",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L315"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_scl",
    "gesture": "turn",
    "action": "Changes the transpose amount.",
    "short_label": "TRN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "75",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L75"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_chord",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice",
    "gesture": "turn",
    "action": "Changes the note priority.",
    "short_label": "PRIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L87"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "326",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L326"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_voice_2",
    "gesture": "turn",
    "action": "Changes the track mute.",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L91"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "327",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L327"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_global",
    "gesture": "turn",
    "action": "Changes the master tuning.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "118",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L118"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "328",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L328"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_system",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "130",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L130"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp",
    "gesture": "turn",
    "action": "Changes the arpeggiator gate length.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "67",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L67"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "334",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L334"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_arp_2",
    "gesture": "turn",
    "action": "Changes the arpeggiator note order.",
    "short_label": "ORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L71"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "335",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L335"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_pattern",
    "gesture": "turn",
    "action": "Changes the pattern gate length.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L79"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "337",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L337"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "447-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L447-L452"
     }
    ]
   },
   {
    "mode": "synth_mod",
    "gesture": "turn",
    "action": "Changes the selected modulation slot’s amount.",
    "short_label": "AMOUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "443-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L443-L452"
     }
    ]
   },
   {
    "mode": "synth_home_drum",
    "gesture": "turn",
    "action": "Changes the DRUM SNAP setting.",
    "short_label": "SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_drum",
    "gesture": "turn",
    "action": "Changes the DRUM DECY setting.",
    "short_label": "DECY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_drum",
    "gesture": "turn",
    "action": "Changes the DRUM DRV setting.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_drum.c",
      "lines": "280-302",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_drum.c#L280-L302"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_analog",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG NOIS setting.",
    "short_label": "NOIS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_analog",
    "gesture": "turn",
    "action": "Changes the ANALOG KTR setting.",
    "short_label": "KTR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_analog.c",
      "lines": "96-115",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_analog.c#L96-L115"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_trio",
    "gesture": "turn",
    "action": "Changes the TRIO INT2 setting.",
    "short_label": "INT2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_trio",
    "gesture": "turn",
    "action": "Changes the TRIO DTN setting.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_trio",
    "gesture": "turn",
    "action": "Changes the TRIO PW setting.",
    "short_label": "PW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_trio.c",
      "lines": "355-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_trio.c#L355-L373"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_lofi",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_lofi",
    "gesture": "turn",
    "action": "Changes LOFI crushing, or the chip envelope when CHIP is STEP.",
    "short_label": "CRUSH / DCY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_edit2_lofi",
    "gesture": "turn",
    "action": "Changes the LOFI TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L216-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "synth_home_noise",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_noise",
    "gesture": "turn",
    "action": "Changes the NOISE RES setting.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_edit2_noise",
    "gesture": "turn",
    "action": "Changes NOISE crushing, or the clock above the key in LFSR and META modes.",
    "short_label": "CRUSH / CLK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "251-271",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L251-L271"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "synth_home_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 PTCH setting.",
    "short_label": "PTCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 MRAT setting.",
    "short_label": "MRAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_fm6",
    "gesture": "turn",
    "action": "Changes the FM6 PTCH setting.",
    "short_label": "PTCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_fm6.c",
      "lines": "347-369",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_fm6.c#L347-L369"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_sample",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_sample",
    "gesture": "turn",
    "action": "Changes the SAMPLE LOOP setting.",
    "short_label": "LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_sample",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_sample.c",
      "lines": "227-247",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_sample.c#L227-L247"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_slice",
    "gesture": "turn",
    "action": "Changes the SLICE DCAY setting.",
    "short_label": "DCAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_slice",
    "gesture": "turn",
    "action": "Changes the SLICE PTCH setting.",
    "short_label": "PTCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_slice",
    "gesture": "turn",
    "action": "Changes the SLICE TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_slice.c",
      "lines": "602-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_slice.c#L602-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_chord",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_chord",
    "gesture": "turn",
    "action": "Changes the CHORD RATIO setting.",
    "short_label": "RATIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_chord",
    "gesture": "turn",
    "action": "Changes the CHORD TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_hc.c",
      "lines": "110-129",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_hc.c#L110-L129"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL ROTR setting.",
    "short_label": "ROTR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL TOP setting.",
    "short_label": "TOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_wheel",
    "gesture": "turn",
    "action": "Changes the WHEEL ROTR setting.",
    "short_label": "ROTR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_wheel.c",
      "lines": "278-297",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_wheel.c#L278-L297"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_voice",
    "gesture": "turn",
    "action": "Changes the VOICE TALK setting.",
    "short_label": "TALK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_voice",
    "gesture": "turn",
    "action": "Changes the VOICE SHIFT setting.",
    "short_label": "SHIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_voice",
    "gesture": "turn",
    "action": "Changes the VOICE RAND setting.",
    "short_label": "RAND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_formant.c",
      "lines": "213-232",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_formant.c#L213-L232"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phys",
    "gesture": "turn",
    "action": "Changes PHYS excitation position, or sympathetic resonance in SYMP.",
    "short_label": "POS / SYMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit1_phys",
    "gesture": "turn",
    "action": "Changes the PHYS DAMP setting.",
    "short_label": "DAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_edit2_phys",
    "gesture": "turn",
    "action": "Changes the PHYS EXC setting.",
    "short_label": "EXC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "233-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L233-L253"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phys.c",
      "lines": "61-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phys.c#L61-L77"
     }
    ]
   },
   {
    "mode": "synth_home_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN SPRD setting.",
    "short_label": "SPRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit1_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN DENS setting.",
    "short_label": "DENS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_grain",
    "gesture": "turn",
    "action": "Changes the GRAIN TONE setting.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_grain.c",
      "lines": "431-451",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_grain.c#L431-L451"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_home_phase",
    "gesture": "turn",
    "action": "Changes the envelope release time.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/params.c#L51"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "959-964",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L959-L964"
     }
    ]
   },
   {
    "mode": "synth_edit1_phase",
    "gesture": "turn",
    "action": "Changes the PHASE ENV setting.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_edit2_phase",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/eng_phase.c",
      "lines": "183-201",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/eng_phase.c#L183-L201"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "938-956",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L938-L956"
     }
    ]
   },
   {
    "mode": "synth_mixer",
    "gesture": "turn",
    "action": "Mutes the selected track clockwise or unmutes it counterclockwise.",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-233",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L207-L233"
     }
    ]
   },
   {
    "mode": "synth_presets",
    "gesture": "turn",
    "action": "Enables favorites-only browsing clockwise or disables it counterclockwise, saving settings without a question once stopped.",
    "short_label": "FAV FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "407-418",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L407-L418"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "turn",
    "action": "Selects saving the current sound and a sixteen-step phrase clockwise; OCT+ asks before overwriting then opens naming, while melodic chords keep only their first note and motion is omitted.",
    "short_label": "SAVE SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-436",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L436"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "137-145",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L137-L145"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "327-352",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L327-L352"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "turn",
    "action": "Selects SAVE clockwise or drops it counterclockwise, with OCT+ asking about an occupied project before opening naming; A–D contain the same saved music as P1–P4.",
    "short_label": "SAVE PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-452",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L452"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "311-316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L311-L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "459-460",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L459-L460"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "516-525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "651-674",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L651-L674"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "turn",
    "action": "Selects clearing the working song order; OCT+ asks first and there is no undo.",
    "short_label": "CLEAR SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "467-475",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L467-L475"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "turn",
    "action": "Chooses accent, slide, both or neither at the cursor.",
    "short_label": "FLAGS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "317-351",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L317-L351"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "turn",
    "action": "Adds the selected lane’s accent clockwise or removes it counterclockwise at the cursor.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "277-287",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L277-L287"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "428-441",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L428-L441"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "374-394",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L374-L394"
     }
    ]
   },
   {
    "mode": "synth_chance",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "359-366",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L359-L366"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "turn",
    "action": "Selects clearing this track’s motion clockwise or drops it counterclockwise; OCT+ asks first and SAVE-held undo can restore it.",
    "short_label": "CLEAR MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "368-373",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L368-L373"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "turn",
    "action": "Selects joining the current slice to its predecessor for OCT+; the first slice cannot be joined.",
    "short_label": "JOIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "127-193",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L127-L193"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Reduces the buffer-effect level, or raises shimmer feedback while an octave effect sounds; releasing FX resets the macro.",
    "short_label": "DEPTH / SHIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "252-258",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L252-L258"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "turn_while_holding:button_glo",
    "action": "Changes track 4 level and records the change when motion recording is armed.",
    "short_label": "T4 LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "258-261",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L258-L261"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "turn_while_holding:button_sel",
    "action": "Changes the chord voicing.",
    "short_label": "VOICING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "39-40",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L39-L40"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "269-278",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L269-L278"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "turn_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "262-268",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L262-L268"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "857-863",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L857-L863"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "turn",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "193-203",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L193-L203"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "turn",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "turn_cw",
    "action": "Teaches this encoder and its clockwise direction when prompted; inactivity for thirty seconds cancels to the previous mapping.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "1010-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L1010-L1043"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "turn",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "268-318",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L268-L318"
     }
    ]
   },
   {
    "mode": "synth_recording",
    "gesture": "turn",
    "action": "Changes its current page parameter and records eligible motion on the selected track, with one shared limit of 64 events; a full pool rejects new events and reports MOTION FULL.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/motion.c",
      "lines": "111-162",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/motion.c#L111-L162"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/core.h",
      "lines": "219-222",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/core.h#L219-L222"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "662-665",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L662-L665"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "home",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Moves the keyboard octave down within −2 to +2, except in MIXER.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "short_label": "LAYER LEVEL",
    "action": "With the home screen showing, changes the selected layer’s level down by eight steps within 0–127.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "key_menu_key",
    "gesture": "press",
    "short_label": "KEY",
    "action": "Changes the key for all four tracks in semitone steps with wrapping (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L494"
     }
    ]
   },
   {
    "mode": "key_menu_octave",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Changes the keyboard octave within −2 to +2 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "495",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L495"
     }
    ]
   },
   {
    "mode": "key_menu_scale",
    "gesture": "press",
    "short_label": "SCALE",
    "action": "Cycles the ten scales for all four tracks (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "496",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L496"
     }
    ]
   },
   {
    "mode": "key_menu_layout",
    "gesture": "press",
    "short_label": "LAYOUT",
    "action": "Switches between degree keys and roots based on the printed white-key letters snapped to the scale.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "497",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L497"
     }
    ]
   },
   {
    "mode": "key_menu_joystick",
    "gesture": "press",
    "short_label": "JOYSTICK",
    "action": "Cycles DEFAULT, EXTEND, CHROM, BORROW and OG chord-modifier tables (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "498",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L498"
     }
    ]
   },
   {
    "mode": "key_menu_bass",
    "gesture": "press",
    "short_label": "BASS",
    "action": "Cycles OFF, ROOT and SLASH, where the first held chord key supplies the bass for later chords (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "499",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L499"
     }
    ]
   },
   {
    "mode": "key_menu_voices",
    "gesture": "press",
    "short_label": "VOICES",
    "action": "Cycles the 8, 4, 2 and 1 voicing choices (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "500",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L500"
     }
    ]
   },
   {
    "mode": "key_menu_voice_lead",
    "gesture": "press",
    "short_label": "VOICE LEAD",
    "action": "Toggles voicing that brings each chord closer to the previous one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "501",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L501"
     }
    ]
   },
   {
    "mode": "key_menu_random",
    "gesture": "press",
    "short_label": "RANDOM ALL",
    "action": "Randomizes the key, scale, tempo, modifier table, bass, voices, sound, pattern settings and one of the first six play modes without a question or chord-interface undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "502",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L502"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L381"
     }
    ]
   },
   {
    "mode": "sound_menu_sound",
    "gesture": "press",
    "short_label": "SOUND",
    "action": "Cycles the 38 sounds and resets the envelope and attack/release overrides (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L508"
     }
    ]
   },
   {
    "mode": "sound_menu_envelope",
    "gesture": "press",
    "short_label": "ENVELOPE",
    "action": "Cycles seven envelope presets and clears the attack and release overrides (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "509",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L509"
     }
    ]
   },
   {
    "mode": "sound_menu_attack",
    "gesture": "press",
    "short_label": "ATTACK",
    "action": "Changes the attack override by four steps within 1–127 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "510",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L510"
     }
    ]
   },
   {
    "mode": "sound_menu_release",
    "gesture": "press",
    "short_label": "RELEASE",
    "action": "Changes the release override by four steps within 1–127 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "511",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L511"
     }
    ]
   },
   {
    "mode": "sound_menu_filter",
    "gesture": "press",
    "short_label": "FILTER",
    "action": "Toggles the filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "512",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L512"
     }
    ]
   },
   {
    "mode": "sound_menu_cutoff",
    "gesture": "press",
    "short_label": "CUTOFF",
    "action": "Changes cutoff by four steps within 0–127 and enables the filter (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "513",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L513"
     }
    ]
   },
   {
    "mode": "sound_menu_resonance",
    "gesture": "press",
    "short_label": "RESONANCE",
    "action": "Changes resonance by four steps within 0–127 and enables the filter (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "514",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L514"
     }
    ]
   },
   {
    "mode": "sound_menu_highpass",
    "gesture": "press",
    "short_label": "HI-PASS",
    "action": "Toggles the high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L515"
     }
    ]
   },
   {
    "mode": "sound_menu_reverb",
    "gesture": "press",
    "short_label": "REVERB",
    "action": "Cycles OFF, ROOM, HALL, PLATE, SPRING and AMBIENT reverb types (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "516",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L516"
     }
    ]
   },
   {
    "mode": "sound_menu_delay",
    "gesture": "press",
    "short_label": "DELAY",
    "action": "Cycles delay off or timing of 1/4, 1/8, 1/16, 1/16T and 1/32 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "517",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L517"
     }
    ]
   },
   {
    "mode": "sound_menu_chorus",
    "gesture": "press",
    "short_label": "CHORUS",
    "action": "Cycles OFF, LIGHT, WARM, WIDE and LUSH chorus types (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "518",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L518"
     }
    ]
   },
   {
    "mode": "sound_menu_flanger",
    "gesture": "press",
    "short_label": "FLANGER",
    "action": "Cycles OFF, SLOW, JET, DEEP and METAL flanger types (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "519",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L519"
     }
    ]
   },
   {
    "mode": "sound_menu_tremolo",
    "gesture": "press",
    "short_label": "TREMOLO",
    "action": "Cycles tremolo off or timing of 1/4, 1/8, 1/16, 1/16T and 1/32 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "520",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L520"
     }
    ]
   },
   {
    "mode": "sound_menu_lfo",
    "gesture": "press",
    "short_label": "VIBRATO",
    "action": "Cycles OFF, LOW, MED and HIGH vibrato (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "521",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L521"
     }
    ]
   },
   {
    "mode": "sound_menu_glide",
    "gesture": "press",
    "short_label": "GLIDE",
    "action": "Cycles OFF, SHORT, MEDIUM and LONG glide (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "522",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L522"
     }
    ]
   },
   {
    "mode": "sound_menu_drive",
    "gesture": "press",
    "short_label": "DRIVE",
    "action": "Cycles OFF, TUBE, DRIVE, DIST and FUZZ distortion (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "523",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L523"
     }
    ]
   },
   {
    "mode": "sound_menu_tape",
    "gesture": "press",
    "short_label": "TAPE",
    "action": "Cycles OFF, LOFI, VINYL and TAPE coloration (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "524",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L524"
     }
    ]
   },
   {
    "mode": "sound_menu_stereo",
    "gesture": "press",
    "short_label": "STEREO",
    "action": "Toggles stereo processing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L525"
     }
    ]
   },
   {
    "mode": "sound_menu_speaker",
    "gesture": "press",
    "short_label": "SPEAKER",
    "action": "Cycles FLAT, LOWCUT and BASS+ speaker processing, whose change alone does not schedule a save (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "526",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L526"
     }
    ]
   },
   {
    "mode": "sound_menu_output",
    "gesture": "press",
    "short_label": "OUT LEVEL",
    "action": "Switches HOT output and LINE output with a 10 dB reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "527",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L527"
     }
    ]
   },
   {
    "mode": "sound_menu_midi_in",
    "gesture": "press",
    "short_label": "MIDI IN",
    "action": "Toggles the displayed MIDI IN choice, which neither disables incoming MIDI notes nor survives save and recall reliably in v0.3.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "528",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L528"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "745-759",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L745-L759"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/midi_control.c",
      "lines": "264-267",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/midi_control.c#L264-L267"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "233-266",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "78-99",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/settings_persist.c",
      "lines": "10-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
     }
    ]
   },
   {
    "mode": "sound_menu_random",
    "gesture": "press",
    "short_label": "RANDOM SOUND",
    "action": "Randomizes the sound, envelope and effect choices and switches glide off without a question or chord-interface undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "529",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L529"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L381"
     }
    ]
   },
   {
    "mode": "mode_menu_mode",
    "gesture": "press",
    "short_label": "PLAY MODE",
    "action": "Cycles the twelve play modes (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "534",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L534"
     }
    ]
   },
   {
    "mode": "mode_menu_tempo",
    "gesture": "press",
    "short_label": "TEMPO",
    "action": "Changes tempo by one BPM within 40–240 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "535",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L535"
     }
    ]
   },
   {
    "mode": "mode_menu_strum",
    "gesture": "press",
    "short_label": "STRUM SPEED",
    "action": "Cycles SLOW, MEDIUM and FAST chord roll timing (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "536",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L536"
     }
    ]
   },
   {
    "mode": "mode_menu_arp_pattern",
    "gesture": "press",
    "short_label": "ARP PATTERN",
    "action": "Cycles UP, DOWN, UP/DOWN, DOWN/UP, RANDOM and FINGERPICK (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "537",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L537"
     }
    ]
   },
   {
    "mode": "mode_menu_arp_rate",
    "gesture": "press",
    "short_label": "ARP RATE",
    "action": "Cycles 1/1, 1/2, 1/4, 1/8, 1/16, 1/16T, 1/32, SWING 8 and SWING 16 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "538",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L538"
     }
    ]
   },
   {
    "mode": "mode_menu_arp_layer",
    "gesture": "press",
    "short_label": "ARP LAYER",
    "action": "Cycles ARP ONLY, CHORD+ARP and RHYTHM+ARP (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "539",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L539"
     }
    ]
   },
   {
    "mode": "mode_menu_seq_length",
    "gesture": "press",
    "short_label": "SEQ LENGTH",
    "action": "Changes the chord-sequence length in four-step increments within 4–16 without clearing the hidden steps (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "540",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L540"
     }
    ]
   },
   {
    "mode": "mode_menu_drum_kit",
    "gesture": "press",
    "short_label": "DRUM KIT",
    "action": "Cycles the four drum kits (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "541",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L541"
     }
    ]
   },
   {
    "mode": "mode_menu_loop_style",
    "gesture": "press",
    "short_label": "LOOP STYLE",
    "action": "Cycles ROCK, BREAK, DUB, FUNK, HOUSE, DEMBOW and SWING drum-loop styles (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "542",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L542"
     }
    ]
   },
   {
    "mode": "mode_menu_loop_variation",
    "gesture": "press",
    "short_label": "LOOP VARIANT",
    "action": "Cycles ORIG, GHOST, BUSY, SYNCOPATED, FILL, HALF-TIME, DOUBLE-TIME and PERC variations (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "543",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L543"
     }
    ]
   },
   {
    "mode": "mode_menu_hiro_song",
    "gesture": "press",
    "short_label": "HIRO SONG",
    "action": "Cycles the Chord Hiro songs (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "544",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L544"
     }
    ]
   },
   {
    "mode": "mode_menu_difficulty",
    "gesture": "press",
    "short_label": "DIFFICULTY",
    "action": "Cycles the Chord Hiro timing difficulty (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "545",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L545"
     }
    ]
   },
   {
    "mode": "mode_menu_speed",
    "gesture": "press",
    "short_label": "GAME SPEED",
    "action": "Changes practice speed by 10 percent within 50–100 percent (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "546",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L546"
     }
    ]
   },
   {
    "mode": "mode_menu_ear_level",
    "gesture": "press",
    "short_label": "EAR LEVEL",
    "action": "Cycles the Ear Trainer levels (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "547",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L547"
     }
    ]
   },
   {
    "mode": "mode_menu_random",
    "gesture": "press",
    "short_label": "RANDOM ARP",
    "action": "Randomizes arp pattern, rate, layering and strum timing without changing the chord sequence or asking for confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "548",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L548"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L381"
     }
    ]
   },
   {
    "mode": "env_list",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing to the choice in this list.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-571",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L571"
     }
    ]
   },
   {
    "mode": "lfo_list",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing to the choice in this list.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-571",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L571"
     }
    ]
   },
   {
    "mode": "sound_list",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Closes the temporary list and moves the octave down, or changes the layer level if MIXER is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "mode_list",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Closes the temporary list and moves the octave down, or changes the layer level if MIXER is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "preset_1",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on the selected preset row.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-571",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L571"
     }
    ]
   },
   {
    "mode": "preset_2",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on the selected preset row.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-571",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L571"
     }
    ]
   },
   {
    "mode": "preset_3",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on the selected preset row.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-571",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L571"
     }
    ]
   },
   {
    "mode": "preset_4",
    "gesture": "press",
    "short_label": "-",
    "action": "Does nothing on the selected preset row.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-571",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L571"
     }
    ]
   },
   {
    "mode": "looper_layer_1",
    "gesture": "press",
    "short_label": "CLEAR LAYER",
    "action": "Immediately clears layer 1’s recorded notes in working memory without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-557",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "65-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L65-L71"
     }
    ]
   },
   {
    "mode": "looper_layer_2",
    "gesture": "press",
    "short_label": "CLEAR LAYER",
    "action": "Immediately clears layer 2’s recorded notes in working memory without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-557",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "65-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L65-L71"
     }
    ]
   },
   {
    "mode": "looper_layer_3",
    "gesture": "press",
    "short_label": "CLEAR LAYER",
    "action": "Immediately clears layer 3’s recorded notes in working memory without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-557",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "65-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L65-L71"
     }
    ]
   },
   {
    "mode": "looper_layer_4",
    "gesture": "press",
    "short_label": "CLEAR LAYER",
    "action": "Immediately clears layer 4’s recorded notes in working memory without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-557",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L557"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "65-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L65-L71"
     }
    ]
   },
   {
    "mode": "looper_bars",
    "gesture": "press",
    "short_label": "LOOP BARS",
    "action": "Changes the first loop’s length setting from FREE to 1–8 bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "558-559",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L558-L559"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "191-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L191-L226"
     }
    ]
   },
   {
    "mode": "looper_metronome",
    "gesture": "press",
    "short_label": "METRONOME",
    "action": "Toggles recording metronome clicks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "560-561",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L560-L561"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "191-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L191-L226"
     }
    ]
   },
   {
    "mode": "looper_clear_all",
    "gesture": "press",
    "short_label": "CLEAR LOOPS",
    "action": "Immediately clears all four looper recordings and stops their transport without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "562-565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L562-L565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "81-89",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L81-L89"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Moves the keyboard down one octave within three octaves of its starting range.",
    "short_label": "OCTAVE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "880-889",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L880-L889"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press_with:button_oct_up",
    "action": "Returns the keyboard octave shift to zero.",
    "short_label": "OCTAVE ZERO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "882-888",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L882-L888"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "release",
    "action": "Drops the selected action, or returns HOME when no cancellable action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "release",
    "action": "Drops the selected action, or returns HOME when no cancellable action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "release",
    "action": "Drops the selected action, or returns HOME when no cancellable action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "release",
    "action": "Drops the selected action, or returns HOME when no cancellable action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "release",
    "action": "Drops the selected action, or returns HOME when no cancellable action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "release",
    "action": "Drops the selected action, or returns HOME when no cancellable action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "release",
    "action": "Drops the selected slice action, or returns HOME when no action is selected.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "902-909",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L902-L909"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "release",
    "action": "Restores the layer’s original track mutes, levels and tempo, without changing saved slots.",
    "short_label": "PUT BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "294-323",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L294-L323"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "release",
    "action": "Restores the layer’s original scale, key mapping, chord and voicing, without changing saved slots.",
    "short_label": "PUT BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "294-323",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L294-L323"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "release",
    "action": "Restores the layer’s original sound if a load occurred, without changing saved slots.",
    "short_label": "PUT BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "294-323",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L294-L323"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "release",
    "action": "Closes naming without writing anything.",
    "short_label": "CANCEL NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "270-273",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L270-L273"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "release",
    "action": "Closes this question without carrying out the action.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L837-L843"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "release",
    "action": "Closes the menu and requests a settings save without a question once stopped; unchanged settings avoid a new write.",
    "short_label": "CLOSE MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L265"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "934-965",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L934-L965"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "release",
    "action": "Returns to the menu list.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "261-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L261-L265"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_up",
    "action": "Starts hardware calibration; boot requests a settings save afterward without a question even if thirty seconds of inactivity cancels to the old mapping, writing only if settings differ.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1043",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L983-L1043"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "934-965",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L934-L965"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "Holding both octave buttons for five seconds enters the bootloader, with a countdown from two seconds; releasing either earlier cancels.",
    "short_label": "UPDATE 5s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "242-268",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L242-L268"
     }
    ]
   },
   {
    "mode": "synth_update",
    "gesture": "release",
    "action": "Cancels the update countdown before the bootloader is entered.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "247-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L247-L253"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "home",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Moves the keyboard octave up within −2 to +2, except in MIXER.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "short_label": "LAYER LEVEL",
    "action": "With the home screen showing, changes the selected layer’s level up by eight steps within 0–127.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "key_menu_key",
    "gesture": "press",
    "short_label": "KEY",
    "action": "Changes the key for all four tracks in semitone steps with wrapping (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L494"
     }
    ]
   },
   {
    "mode": "key_menu_octave",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Changes the keyboard octave within −2 to +2 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "495",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L495"
     }
    ]
   },
   {
    "mode": "key_menu_scale",
    "gesture": "press",
    "short_label": "SCALE",
    "action": "Cycles the ten scales for all four tracks (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "496",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L496"
     }
    ]
   },
   {
    "mode": "key_menu_layout",
    "gesture": "press",
    "short_label": "LAYOUT",
    "action": "Switches between degree keys and roots based on the printed white-key letters snapped to the scale.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "497",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L497"
     }
    ]
   },
   {
    "mode": "key_menu_joystick",
    "gesture": "press",
    "short_label": "JOYSTICK",
    "action": "Cycles DEFAULT, EXTEND, CHROM, BORROW and OG chord-modifier tables (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "498",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L498"
     }
    ]
   },
   {
    "mode": "key_menu_bass",
    "gesture": "press",
    "short_label": "BASS",
    "action": "Cycles OFF, ROOT and SLASH, where the first held chord key supplies the bass for later chords (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "499",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L499"
     }
    ]
   },
   {
    "mode": "key_menu_voices",
    "gesture": "press",
    "short_label": "VOICES",
    "action": "Cycles the 8, 4, 2 and 1 voicing choices (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "500",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L500"
     }
    ]
   },
   {
    "mode": "key_menu_voice_lead",
    "gesture": "press",
    "short_label": "VOICE LEAD",
    "action": "Toggles voicing that brings each chord closer to the previous one.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "501",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L501"
     }
    ]
   },
   {
    "mode": "key_menu_random",
    "gesture": "press",
    "short_label": "RANDOM ALL",
    "action": "Randomizes the key, scale, tempo, modifier table, bass, voices, sound, pattern settings and one of the first six play modes without a question or chord-interface undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "502",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L502"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L381"
     }
    ]
   },
   {
    "mode": "sound_menu_sound",
    "gesture": "press",
    "short_label": "SOUND",
    "action": "Cycles the 38 sounds and resets the envelope and attack/release overrides (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "508",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L508"
     }
    ]
   },
   {
    "mode": "sound_menu_envelope",
    "gesture": "press",
    "short_label": "ENVELOPE",
    "action": "Cycles seven envelope presets and clears the attack and release overrides (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "509",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L509"
     }
    ]
   },
   {
    "mode": "sound_menu_attack",
    "gesture": "press",
    "short_label": "ATTACK",
    "action": "Changes the attack override by four steps within 1–127 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "510",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L510"
     }
    ]
   },
   {
    "mode": "sound_menu_release",
    "gesture": "press",
    "short_label": "RELEASE",
    "action": "Changes the release override by four steps within 1–127 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "511",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L511"
     }
    ]
   },
   {
    "mode": "sound_menu_filter",
    "gesture": "press",
    "short_label": "FILTER",
    "action": "Toggles the filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "512",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L512"
     }
    ]
   },
   {
    "mode": "sound_menu_cutoff",
    "gesture": "press",
    "short_label": "CUTOFF",
    "action": "Changes cutoff by four steps within 0–127 and enables the filter (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "513",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L513"
     }
    ]
   },
   {
    "mode": "sound_menu_resonance",
    "gesture": "press",
    "short_label": "RESONANCE",
    "action": "Changes resonance by four steps within 0–127 and enables the filter (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "514",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L514"
     }
    ]
   },
   {
    "mode": "sound_menu_highpass",
    "gesture": "press",
    "short_label": "HI-PASS",
    "action": "Toggles the high-pass filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L515"
     }
    ]
   },
   {
    "mode": "sound_menu_reverb",
    "gesture": "press",
    "short_label": "REVERB",
    "action": "Cycles OFF, ROOM, HALL, PLATE, SPRING and AMBIENT reverb types (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "516",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L516"
     }
    ]
   },
   {
    "mode": "sound_menu_delay",
    "gesture": "press",
    "short_label": "DELAY",
    "action": "Cycles delay off or timing of 1/4, 1/8, 1/16, 1/16T and 1/32 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "517",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L517"
     }
    ]
   },
   {
    "mode": "sound_menu_chorus",
    "gesture": "press",
    "short_label": "CHORUS",
    "action": "Cycles OFF, LIGHT, WARM, WIDE and LUSH chorus types (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "518",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L518"
     }
    ]
   },
   {
    "mode": "sound_menu_flanger",
    "gesture": "press",
    "short_label": "FLANGER",
    "action": "Cycles OFF, SLOW, JET, DEEP and METAL flanger types (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "519",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L519"
     }
    ]
   },
   {
    "mode": "sound_menu_tremolo",
    "gesture": "press",
    "short_label": "TREMOLO",
    "action": "Cycles tremolo off or timing of 1/4, 1/8, 1/16, 1/16T and 1/32 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "520",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L520"
     }
    ]
   },
   {
    "mode": "sound_menu_lfo",
    "gesture": "press",
    "short_label": "VIBRATO",
    "action": "Cycles OFF, LOW, MED and HIGH vibrato (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "521",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L521"
     }
    ]
   },
   {
    "mode": "sound_menu_glide",
    "gesture": "press",
    "short_label": "GLIDE",
    "action": "Cycles OFF, SHORT, MEDIUM and LONG glide (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "522",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L522"
     }
    ]
   },
   {
    "mode": "sound_menu_drive",
    "gesture": "press",
    "short_label": "DRIVE",
    "action": "Cycles OFF, TUBE, DRIVE, DIST and FUZZ distortion (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "523",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L523"
     }
    ]
   },
   {
    "mode": "sound_menu_tape",
    "gesture": "press",
    "short_label": "TAPE",
    "action": "Cycles OFF, LOFI, VINYL and TAPE coloration (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "524",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L524"
     }
    ]
   },
   {
    "mode": "sound_menu_stereo",
    "gesture": "press",
    "short_label": "STEREO",
    "action": "Toggles stereo processing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L525"
     }
    ]
   },
   {
    "mode": "sound_menu_speaker",
    "gesture": "press",
    "short_label": "SPEAKER",
    "action": "Cycles FLAT, LOWCUT and BASS+ speaker processing, whose change alone does not schedule a save (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "526",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L526"
     }
    ]
   },
   {
    "mode": "sound_menu_output",
    "gesture": "press",
    "short_label": "OUT LEVEL",
    "action": "Switches HOT output and LINE output with a 10 dB reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "527",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L527"
     }
    ]
   },
   {
    "mode": "sound_menu_midi_in",
    "gesture": "press",
    "short_label": "MIDI IN",
    "action": "Toggles the displayed MIDI IN choice, which neither disables incoming MIDI notes nor survives save and recall reliably in v0.3.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "528",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L528"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "745-759",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L745-L759"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/midi_control.c",
      "lines": "264-267",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/midi_control.c#L264-L267"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "233-266",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "78-99",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/settings_persist.c",
      "lines": "10-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
     }
    ]
   },
   {
    "mode": "sound_menu_random",
    "gesture": "press",
    "short_label": "RANDOM SOUND",
    "action": "Randomizes the sound, envelope and effect choices and switches glide off without a question or chord-interface undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "529",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L529"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L381"
     }
    ]
   },
   {
    "mode": "mode_menu_mode",
    "gesture": "press",
    "short_label": "PLAY MODE",
    "action": "Cycles the twelve play modes (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "534",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L534"
     }
    ]
   },
   {
    "mode": "mode_menu_tempo",
    "gesture": "press",
    "short_label": "TEMPO",
    "action": "Changes tempo by one BPM within 40–240 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "535",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L535"
     }
    ]
   },
   {
    "mode": "mode_menu_strum",
    "gesture": "press",
    "short_label": "STRUM SPEED",
    "action": "Cycles SLOW, MEDIUM and FAST chord roll timing (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "536",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L536"
     }
    ]
   },
   {
    "mode": "mode_menu_arp_pattern",
    "gesture": "press",
    "short_label": "ARP PATTERN",
    "action": "Cycles UP, DOWN, UP/DOWN, DOWN/UP, RANDOM and FINGERPICK (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "537",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L537"
     }
    ]
   },
   {
    "mode": "mode_menu_arp_rate",
    "gesture": "press",
    "short_label": "ARP RATE",
    "action": "Cycles 1/1, 1/2, 1/4, 1/8, 1/16, 1/16T, 1/32, SWING 8 and SWING 16 (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "538",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L538"
     }
    ]
   },
   {
    "mode": "mode_menu_arp_layer",
    "gesture": "press",
    "short_label": "ARP LAYER",
    "action": "Cycles ARP ONLY, CHORD+ARP and RHYTHM+ARP (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "539",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L539"
     }
    ]
   },
   {
    "mode": "mode_menu_seq_length",
    "gesture": "press",
    "short_label": "SEQ LENGTH",
    "action": "Changes the chord-sequence length in four-step increments within 4–16 without clearing the hidden steps (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "540",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L540"
     }
    ]
   },
   {
    "mode": "mode_menu_drum_kit",
    "gesture": "press",
    "short_label": "DRUM KIT",
    "action": "Cycles the four drum kits (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "541",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L541"
     }
    ]
   },
   {
    "mode": "mode_menu_loop_style",
    "gesture": "press",
    "short_label": "LOOP STYLE",
    "action": "Cycles ROCK, BREAK, DUB, FUNK, HOUSE, DEMBOW and SWING drum-loop styles (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "542",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L542"
     }
    ]
   },
   {
    "mode": "mode_menu_loop_variation",
    "gesture": "press",
    "short_label": "LOOP VARIANT",
    "action": "Cycles ORIG, GHOST, BUSY, SYNCOPATED, FILL, HALF-TIME, DOUBLE-TIME and PERC variations (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "543",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L543"
     }
    ]
   },
   {
    "mode": "mode_menu_hiro_song",
    "gesture": "press",
    "short_label": "HIRO SONG",
    "action": "Cycles the Chord Hiro songs (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "544",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L544"
     }
    ]
   },
   {
    "mode": "mode_menu_difficulty",
    "gesture": "press",
    "short_label": "DIFFICULTY",
    "action": "Cycles the Chord Hiro timing difficulty (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "545",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L545"
     }
    ]
   },
   {
    "mode": "mode_menu_speed",
    "gesture": "press",
    "short_label": "GAME SPEED",
    "action": "Changes practice speed by 10 percent within 50–100 percent (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "546",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L546"
     }
    ]
   },
   {
    "mode": "mode_menu_ear_level",
    "gesture": "press",
    "short_label": "EAR LEVEL",
    "action": "Cycles the Ear Trainer levels (OCT− backward, OCT+ forward).",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "547",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L547"
     }
    ]
   },
   {
    "mode": "mode_menu_random",
    "gesture": "press",
    "short_label": "RANDOM ARP",
    "action": "Randomizes arp pattern, rate, layering and strum timing without changing the chord sequence or asking for confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "548",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L548"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L381"
     }
    ]
   },
   {
    "mode": "env_list",
    "gesture": "press",
    "short_label": "LOAD P1",
    "action": "Immediately loads P1 without a question or undo, replacing the active project and chord settings if P1 is occupied; the list stays open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-570",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "83-103",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L83-L103"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "322-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "802-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L802-L807"
     }
    ]
   },
   {
    "mode": "lfo_list",
    "gesture": "press",
    "short_label": "LOAD P1",
    "action": "Immediately loads P1 without a question or undo, replacing the active project and chord settings if P1 is occupied; the list stays open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-570",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "83-103",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L83-L103"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "322-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "802-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L802-L807"
     }
    ]
   },
   {
    "mode": "sound_list",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Closes the temporary list and moves the octave up, or changes the layer level if MIXER is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "mode_list",
    "gesture": "press",
    "short_label": "OCTAVE",
    "action": "Closes the temporary list and moves the octave up, or changes the layer level if MIXER is selected.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "699-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "765-772",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
     }
    ]
   },
   {
    "mode": "sound_menu",
    "gesture": "press_with:button_oct_down",
    "short_label": "RANDOM SOUND",
    "action": "Randomizes the sound, envelope and effects and turns glide off without a question or chord-interface undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "753-764",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L753-L764"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "342-357",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L342-L357"
     }
    ]
   },
   {
    "mode": "mode_menu",
    "gesture": "press_with:button_oct_down",
    "short_label": "RANDOM ARP",
    "action": "Randomizes arp pattern, rate, layering and strum timing without changing the chord sequence or asking for confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "753-764",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L753-L764"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "359-367",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L359-L367"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "press_with:button_oct_down",
    "short_label": "RAND ALL",
    "action": "Outside SOUND and MODE, randomizes the key, scale, tempo, modifier table, bass, voices, sound, arp settings and one of the first six play modes without a question or chord-interface undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "753-764",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L753-L764"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "369-381",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L369-L381"
     }
    ]
   },
   {
    "mode": "preset_1",
    "gesture": "press",
    "short_label": "LOAD PRESET",
    "action": "Loads P1 immediately without a question or undo, replacing the active project and chord settings; an empty slot only reports EMPTY.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "322-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-570",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "802-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L802-L807"
     }
    ]
   },
   {
    "mode": "preset_2",
    "gesture": "press",
    "short_label": "LOAD PRESET",
    "action": "Loads P2 immediately without a question or undo, replacing the active project and chord settings; an empty slot only reports EMPTY; saving P1 can leave this preset’s chord settings invalid, causing defaults on recall.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "322-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-570",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "802-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L802-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "233-266",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "78-99",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/settings_persist.c",
      "lines": "10-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
     }
    ]
   },
   {
    "mode": "preset_3",
    "gesture": "press",
    "short_label": "LOAD PRESET",
    "action": "Loads P3 immediately without a question or undo, replacing the active project and chord settings; an empty slot only reports EMPTY; saving P2 can leave this preset’s chord settings invalid, causing defaults on recall.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "322-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-570",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "802-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L802-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "233-266",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "78-99",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/settings_persist.c",
      "lines": "10-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
     }
    ]
   },
   {
    "mode": "preset_4",
    "gesture": "press",
    "short_label": "LOAD PRESET",
    "action": "Loads P4 immediately without a question or undo, replacing the active project and chord settings; an empty slot only reports EMPTY; saving P3 can leave this preset’s chord settings invalid, causing defaults on recall.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "322-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "567-570",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "802-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L802-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "233-266",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "78-99",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/settings_persist.c",
      "lines": "10-23",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
     }
    ]
   },
   {
    "mode": "looper_layer_1",
    "gesture": "press",
    "short_label": "LOOP CYCLE",
    "action": "Advances layer 1 through OFF, ARMED, REC, PLAY and OFF, discarding its recorded notes on PLAY to OFF without a question or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-555",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L555"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "103-149",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L103-L149"
     }
    ]
   },
   {
    "mode": "looper_layer_2",
    "gesture": "press",
    "short_label": "LOOP CYCLE",
    "action": "Advances layer 2 through OFF, ARMED, REC, PLAY and OFF, discarding its recorded notes on PLAY to OFF without a question or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-555",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L555"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "103-149",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L103-L149"
     }
    ]
   },
   {
    "mode": "looper_layer_3",
    "gesture": "press",
    "short_label": "LOOP CYCLE",
    "action": "Advances layer 3 through OFF, ARMED, REC, PLAY and OFF, discarding its recorded notes on PLAY to OFF without a question or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-555",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L555"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "103-149",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L103-L149"
     }
    ]
   },
   {
    "mode": "looper_layer_4",
    "gesture": "press",
    "short_label": "LOOP CYCLE",
    "action": "Advances layer 4 through OFF, ARMED, REC, PLAY and OFF, discarding its recorded notes on PLAY to OFF without a question or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "551-555",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L551-L555"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "103-149",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L103-L149"
     }
    ]
   },
   {
    "mode": "looper_bars",
    "gesture": "press",
    "short_label": "LOOP BARS",
    "action": "Changes the first loop’s length setting from FREE to 1–8 bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "558-559",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L558-L559"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "191-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L191-L226"
     }
    ]
   },
   {
    "mode": "looper_metronome",
    "gesture": "press",
    "short_label": "METRONOME",
    "action": "Toggles recording metronome clicks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "560-561",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L560-L561"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "191-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L191-L226"
     }
    ]
   },
   {
    "mode": "looper_clear_all",
    "gesture": "press",
    "short_label": "CLEAR LOOPS",
    "action": "Immediately clears all four looper recordings and stops their transport without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "562-565",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L562-L565"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "81-89",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L81-L89"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Moves the keyboard up one octave within three octaves of its starting range.",
    "short_label": "OCTAVE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "880-889",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L880-L889"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "release",
    "action": "Runs the selected user-slot action: load replaces the working sound with an undo copy, erase asks first, and save asks before overwrite then opens naming.",
    "short_label": "DO USER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "497-510",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L497-L510"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "release",
    "action": "Loads the selected shared A–D/P1–P4 project without a question or undo, or opens naming for saving while stopped after asking about an occupied slot.",
    "short_label": "DO PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "512-525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L512-L525"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "760-806",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L760-L806"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "311-316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L311-L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "459-460",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L459-L460"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "516-525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "651-674",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L651-L674"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "release",
    "action": "Loads the chosen phrase into the selected track, asking first when it would replace edited steps and keeping a SAVE-held undo copy.",
    "short_label": "LOAD PHRASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "482-488",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L482-L488"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "release",
    "action": "Opens a question for the selected clear, sound reset or song-row action without writing flash.",
    "short_label": "ASK FIRST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "467-475",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L467-L475"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "release",
    "action": "Asks before clearing the selected track’s motion from working memory; SAVE-held undo can restore it.",
    "short_label": "CLEAR MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-465",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L462-L465"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "release",
    "action": "Starts the song order or stops playback.",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "477-480",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L477-L480"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "release",
    "action": "Splits or joins the chosen user-sample slice without a question; edits save after leaving the page once stopped and have no SAVE-held undo.",
    "short_label": "EDIT SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "166-193",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L166-L193"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "117-125",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L117-L125"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/slice_store.c",
      "lines": "91-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/slice_store.c#L91-L102"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press",
    "action": "Does nothing in this setting layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "294-323",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L294-L323"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press",
    "action": "Does nothing in this setting layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "294-323",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L294-L323"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press",
    "action": "Does nothing in this setting layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "294-323",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L294-L323"
     }
    ]
   },
   {
    "mode": "synth_name_user_save",
    "gesture": "release",
    "action": "Writes the named user sound while stopped, keeping only sixteen pattern steps and each melodic step’s first note or the drum grid, omitting motion and separate FM6 patch data, with no undo for overwrite.",
    "short_label": "SAVE SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "327-352",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L327-L352"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "484-510",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L484-L510"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "137-145",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L137-L145"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "367-398",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L367-L398"
     }
    ]
   },
   {
    "mode": "synth_name_user_rename",
    "gesture": "release",
    "action": "Writes only the selected user slot’s name immediately while stopped, without another question or undo.",
    "short_label": "WRITE NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "355-364",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L355-L364"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "484-510",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L484-L510"
     }
    ]
   },
   {
    "mode": "synth_name_project_save",
    "gesture": "release",
    "action": "Immediately writes the four synth tracks, patterns, motion, song order, globals and FM6 patches to A, B, C or D while stopped, replacing the matching P1, P2, P3 or P4 music without another question or undo and leaving its separate chord settings unchanged.",
    "short_label": "SAVE PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "652-711",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L652-L711"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "311-316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L311-L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "459-460",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L459-L460"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "516-525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "651-674",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L651-L674"
     }
    ]
   },
   {
    "mode": "synth_name_project_rename",
    "gesture": "release",
    "action": "Writes only the saved project’s name immediately while stopped, without another question or undo.",
    "short_label": "WRITE NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-237",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L237"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "726-757",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L726-L757"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "release",
    "action": "Opens NAME for the selected user-slot save; no flash write happens until NAME is confirmed.",
    "short_label": "CONTINUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "800-801",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L800-L801"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "release",
    "action": "Opens NAME before replacing the selected shared A–D/P1–P4 project, with the flash write occurring only when NAME is confirmed.",
    "short_label": "CONTINUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "798-799",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L798-L799"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "311-316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L311-L316"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "459-460",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L459-L460"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "516-525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "651-674",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L651-L674"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "release",
    "action": "Erases the chosen user sound and its stored phrase from flash immediately while stopped, with no undo.",
    "short_label": "ERASE SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "802-803",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L802-L803"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "release",
    "action": "Replaces the selected track’s working sequence and phrase settings with the chosen phrase, retaining a SAVE-held undo copy.",
    "short_label": "LOAD PHRASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "804-806",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L804-L806"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "release",
    "action": "Clears the selected track’s working motion events without writing flash and keeps a SAVE-held undo copy.",
    "short_label": "CLEAR MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "807-809",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L807-L809"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "release",
    "action": "Deletes the selected row from the working song order without writing flash or retaining undo.",
    "short_label": "DELETE ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "810-817",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L810-L817"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "release",
    "action": "Clears the working song order without writing flash or retaining undo.",
    "short_label": "CLEAR SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "818-819",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L818-L819"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "release",
    "action": "Loads the selected engine’s first sound while preserving the steps, keeping a SAVE-held undo copy and leaving saved slots unchanged.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "820-821",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L820-L821"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "release",
    "action": "Clears the selected track’s working steps and motion, releases its latched arpeggio and keeps a SAVE-held undo copy without writing flash.",
    "short_label": "CLEAR STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "823-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L823-L835"
     }
    ]
   },
   {
    "mode": "synth_menu_color",
    "gesture": "release",
    "action": "Changes the screen palette.",
    "short_label": "COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "279-303",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L279-L303"
     }
    ]
   },
   {
    "mode": "synth_menu_speaker",
    "gesture": "release",
    "action": "Chooses OFF, LOWCUT or BASS+ speaker filtering.",
    "short_label": "SPEAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "279-303",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L279-L303"
     }
    ]
   },
   {
    "mode": "synth_menu_hold",
    "gesture": "release",
    "action": "Changes shortcut hold time from 0.3 to 0.6 seconds.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "279-303",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L279-L303"
     }
    ]
   },
   {
    "mode": "synth_menu_leds",
    "gesture": "release",
    "action": "Chooses dim idle lights or inverted active lights.",
    "short_label": "LEDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "279-303",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L279-L303"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "release",
    "action": "Applies the selected setting, opens CALIBRATION or ABOUT, or closes the menu when BACK is selected.",
    "short_label": "OK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "297-316",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L297-L316"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_update",
    "gesture": "release",
    "action": "Cancels the update countdown before the bootloader is entered.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "247-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L247-L253"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "chord_ui",
    "gesture": "release",
    "short_label": "LOOP RECORD",
    "action": "After a short press, advances the selected looper layer through OFF, ARMED, REC, PLAY and OFF; PLAY to OFF discards that layer’s notes without a question, flash write or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "825-833",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L833"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "103-149",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L103-L149"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "long_press",
    "short_label": "CLEAR LAYER",
    "action": "After more than 0.7 seconds, clears the selected looper layer without a question or undo and clears all layers if none is playing or recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "825-838",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L825-L838"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "603-617",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L603-L617"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "65-89",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L65-L89"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "Arms or disarms live recording for the selected track and starts playback when armed while stopped, without saving to flash.",
    "short_label": "RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "235-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L235-L253"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "release",
    "action": "Disarms existing recording but refuses to arm a new recording while SONG is open.",
    "short_label": "DISARM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "238-245",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L238-L245"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Does nothing while naming.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-785",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L785"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "LOOP PLAY",
    "action": "Pauses or resumes an existing looper transport outside SEQUENCER, DRUM LOOP and the games, doing nothing if no loop length exists.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "840-855",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L840-L855"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "154-162",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L154-L162"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "short_label": "SEQ PLAY",
    "action": "Starts the chord sequence from its first step, or stops it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "847-849",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L847-L849"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "short_label": "DRUM PLAY",
    "action": "Starts the drum loop from its first step, or stops it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "850-852",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L850-L852"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "short_label": "HIRO PLAY",
    "action": "Starts a Chord Hiro song, or stops it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "841-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L841-L843"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "short_label": "NEW ROUND",
    "action": "Starts a new Ear Trainer round.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "844-846",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L844-L846"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Starts the patterns or stops playback, using the song order when SONG is open.",
    "short_label": "PLAY / STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "861-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L861-L870"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Restarts internal-clock patterns from the beginning while keeping playback running, or starts them if stopped.",
    "short_label": "RESTART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "281-292",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L281-L292"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Stops playback if it was started elsewhere while naming, and never starts it here.",
    "short_label": "STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "777-784",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L777-L784"
     }
    ]
   },
   {
    "mode": "synth_calibration",
    "gesture": "press",
    "action": "Teaches this button’s physical position when the display asks for it; completed calibration saves at boot or on leaving the menu, without an undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "994-1008",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L994-L1008"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-211",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L211"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-253",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L253"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_about",
    "gesture": "press",
    "action": "Does nothing in this menu view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "press",
    "action": "Does nothing while this question is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-775",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L762-L775"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "793-843",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L793-L843"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "short_label": "VOLUME",
    "action": "Changes overall output volume.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "233-239",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L233-L239"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 1 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the KICK pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the KICK pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "KICK OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the ROCK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "ROCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 1 at once.",
    "short_label": "LAYER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 1 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 1 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to F.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "hold",
    "action": "Solos track 1 while this key is held.",
    "short_label": "SOLO 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "219-220",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L219-L220"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "239-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L239-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "release",
    "action": "Ends this key’s solo of track 1.",
    "short_label": "END SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "245-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L245-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the ANALOG engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ANALOG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies repeat 1/8 at the next sixteenth-note boundary while playing or immediately while stopped while held; it is unavailable when its loop would exceed the buffer.",
    "short_label": "REPEAT 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles AB in letter mode, or types 1 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "AB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 2 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the KICK 2 pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the KICK 2 pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "KICK 2 OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the BREAK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 2 at once.",
    "short_label": "LAYER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 2 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 2 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to G.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "hold",
    "action": "Solos track 2 while this key is held.",
    "short_label": "SOLO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "219-220",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L219-L220"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "239-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L239-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "release",
    "action": "Ends this key’s solo of track 2.",
    "short_label": "END SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "245-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L245-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the FM6 engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE FM6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies repeat 1/16 at the next sixteenth-note boundary while playing or immediately while stopped while held; it is unavailable when its loop would exceed the buffer.",
    "short_label": "REPEAT 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles CD in letter mode, or types 2 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "CD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 3 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the SNARE pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the SNARE pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "SNARE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the DUB style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "DUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 3 at once.",
    "short_label": "LAYER 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 3 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 3 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to A.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "hold",
    "action": "Solos track 3 while this key is held.",
    "short_label": "SOLO 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "219-220",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L219-L220"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "239-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L239-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "release",
    "action": "Ends this key’s solo of track 3.",
    "short_label": "END SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "245-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L245-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the PHASE engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies repeat 1/32 at the next sixteenth-note boundary while playing or immediately while stopped while held; it is unavailable when its loop would exceed the buffer.",
    "short_label": "REPEAT 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles EF in letter mode, or types 3 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "EF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 4 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the HAT CL pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "HAT CL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the HAT CL pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "HAT CL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the FUNK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "FUNK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 4 at once.",
    "short_label": "LAYER 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 4 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 4 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to B.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "hold",
    "action": "Solos track 4 while this key is held.",
    "short_label": "SOLO 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "219-220",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L219-L220"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "239-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L239-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "release",
    "action": "Ends this key’s solo of track 4.",
    "short_label": "END SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "245-249",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L245-L249"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the LOFI engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE LOFI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies reverse at the next sixteenth-note boundary while playing or immediately while stopped while held; it is unavailable when its loop would exceed the buffer.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles GH in letter mode, or types 4 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "GH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 5 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the TOM pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the TOM pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "TOM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the HOUSE style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "HOUSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 5 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 5 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to C.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Unmutes all four tracks in working memory.",
    "short_label": "UNMUTE ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "221-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L221-L223"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the SAMPLE engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "SAMPLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies low pass immediately while held.",
    "short_label": "LOW PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles IJK in letter mode, or types 5 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "IJK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 6 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the BELL pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the BELL pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "BELL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the DEMBOW style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "DEMBOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 6 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 6 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to D.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the VOICE engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies high pass immediately while held.",
    "short_label": "HIGH PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles LM in letter mode, or types 6 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "LM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "CHORD 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this chord unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "CHORD OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Rolls the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "ROLL 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Stops this chord’s remaining roll and releases its sounding notes unless HOLD is on, with any earlier held slash-bass key returning to its own chord.",
    "short_label": "ROLL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-907",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L907"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Sustains the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "DRONE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Keeps this chord ringing until another chord or mode replaces it.",
    "short_label": "DRONE STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-870",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L870"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Sets the arpeggiator to the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout, with chord playback determined by ARP LAYER.",
    "short_label": "ARP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Ends this key’s chord unless HOLD is on, follows the last remaining held chord, and stops the arp when no chord remains.",
    "short_label": "ARP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-915",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L915"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Pulses the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout.",
    "short_label": "PULSE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-329",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L329"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Ends this key’s pulsed chord unless HOLD is on, and stops the pulse when no chord remains.",
    "short_label": "PULSE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "909-913",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L909-L913"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 7 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the HAT OP pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "HAT OP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the HAT OP pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "HAT OP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the SWING style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Switches the looper metronome on or off.",
    "short_label": "METRONOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Rolls this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs4",
    "action": "Sustains this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "DRONE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs4",
    "action": "Arpeggiates this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "ARP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs4",
    "action": "Pulses this key’s chord with the UP change from the selected JOYSTICK table.",
    "short_label": "PULSE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Rolls this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds4",
    "action": "Sustains this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds4",
    "action": "Arpeggiates this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds4",
    "action": "Pulses this key’s chord with the UP-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Rolls this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs4",
    "action": "Sustains this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs4",
    "action": "Arpeggiates this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs4",
    "action": "Pulses this key’s chord with the RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "CHORD DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Rolls this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ROLL DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_gs4",
    "action": "Sustains this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "DRONE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_gs4",
    "action": "Arpeggiates this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "ARP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_gs4",
    "action": "Pulses this key’s chord with the DOWN-RIGHT change from the selected JOYSTICK table.",
    "short_label": "PULSE DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "CHORD DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_as4",
    "action": "Rolls this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ROLL DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_as4",
    "action": "Sustains this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "DRONE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_as4",
    "action": "Arpeggiates this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "ARP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_as4",
    "action": "Pulses this key’s chord with the DOWN change from the selected JOYSTICK table.",
    "short_label": "PULSE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Rolls this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_cs5",
    "action": "Sustains this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_cs5",
    "action": "Arpeggiates this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_cs5",
    "action": "Pulses this key’s chord with the DOWN-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Rolls this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_ds5",
    "action": "Sustains this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_ds5",
    "action": "Arpeggiates this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_ds5",
    "action": "Pulses this key’s chord with the LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "CHORD UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "837-840",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L837-L840"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Rolls this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ROLL UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "782-807",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L782-L807"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_fs5",
    "action": "Sustains this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "DRONE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "773-780",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L773-L780"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_fs5",
    "action": "Arpeggiates this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "ARP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-824",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L824"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_fs5",
    "action": "Pulses this key’s chord with the UP-LEFT change from the selected JOYSTICK table.",
    "short_label": "PULSE UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "349-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "825-835",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L825-L835"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and plays this key’s chord above it.",
    "short_label": "SLASH CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, uses the first held chord key’s root as bass, stops earlier held chords, and rolls this key’s chord above it.",
    "short_label": "SLASH ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "With BASS set to SLASH, gives this key’s chord the first held key’s root as bass while retaining this mode’s arp or pulse behavior.",
    "short_label": "SLASH PULSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "332-344",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L332-L344"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "722-730",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "810-839",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L810-L839"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 7 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 7 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to E.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the TRIO engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE TRIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies tape stop immediately while held.",
    "short_label": "TAPE STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles NO in letter mode, or types 7 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "NO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 1 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 1 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 1 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 1 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 1 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 8 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the KICK pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the KICK pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "KICK OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the ROCK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "ROCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 1 at once.",
    "short_label": "LAYER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 8 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 8 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to F.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Sets internal tempo from the third tap onward, averaging the last four taps and restarting after a two-second pause.",
    "short_label": "TAP TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "187-208",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L187-L208"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "224-225",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L224-L225"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the WHEEL engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE WHEEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies freeze immediately while held.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles PQ in letter mode, or types 8 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "PQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 2 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 2 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 2 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 2 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 2 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 9 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the KICK 2 pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the KICK 2 pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "KICK 2 OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the BREAK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 2 at once.",
    "short_label": "LAYER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 9 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 9 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to G.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the GRAIN engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE GRAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies octave up immediately while held.",
    "short_label": "OCTAVE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles RS in letter mode, or types 9 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 3 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 3 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 3 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 3 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 3 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 10 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the SNARE pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the SNARE pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "SNARE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the DUB style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "DUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 3 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 3 at once.",
    "short_label": "LAYER 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 10 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 10 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to A.",
    "short_label": "ROOT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the PHYS engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE PHYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies octave down immediately while held.",
    "short_label": "OCTAVE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Releases this performance effect and returns to any earlier held buffer effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "8-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L8-L10"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles TU in letter mode, or types 0 in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "TU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 4 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 4 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 4 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 4 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 4 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 11 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the HAT CL pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "HAT CL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the HAT CL pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "HAT CL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the FUNK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "FUNK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 4 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 4 at once.",
    "short_label": "LAYER 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 11 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 11 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to B.",
    "short_label": "ROOT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the NOISE engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles VW in letter mode, or types - in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "VW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 5 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 5 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 5 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 5 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 5 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 12 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the TOM pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the TOM pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "TOM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the HOUSE style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "HOUSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 5 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 12 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 12 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to C.",
    "short_label": "ROOT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the SLICE engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles XYZ in letter mode, or types . in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "XYZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 6 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 6 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 6 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 6 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 6 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 13 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the BELL pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "BELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the BELL pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "BELL OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the DEMBOW style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "DEMBOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 6 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 13 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 13 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to D.",
    "short_label": "ROOT D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the CHORD engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles 123 in letter mode, or types _ in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 7 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 7 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 7 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 7 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 7 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 14 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the HAT OP pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "HAT OP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the HAT OP pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "HAT OP OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the SWING style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 7 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Switches the looper metronome on or off.",
    "short_label": "METRONOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 14 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 14 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to E.",
    "short_label": "ROOT E",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Loads the DRUM engine’s first sound without changing the steps; SAVE-held undo or this layer’s OCT- can restore the prior sound.",
    "short_label": "ENGINE DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "168-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L168-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/engines.c",
      "lines": "58-71",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/engines.c#L58-L71"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles 456 in letter mode, or types / in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "456",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 8 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 8 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 8 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 8 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 8 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 15 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the KICK pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the KICK pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "KICK OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the ROCK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "ROCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 1 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 1 at once.",
    "short_label": "LAYER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 15 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 15 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to F.",
    "short_label": "ROOT F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Asks before restoring the selected engine’s first sound; steps stay and SAVE-held undo can restore the sound.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-235",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L235"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Types or cycles 789 in letter mode, or types # in number mode; repeated taps within 0.8 seconds cycle the group.",
    "short_label": "789",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "25-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L25-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "239-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L239-L265"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Plays strumplate note 9 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Plays strumplate note 9 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Plays strumplate note 9 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Plays strumplate note 9 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Plays strumplate note 9 from the last built chord, rising across the plate and using the tonic chord before any chord has been played.",
    "short_label": "PLATE 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "464-470",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L464-L470"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "473-515",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L473-L515"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Releases this strumplate note even when HOLD or DRONE keeps chord keys sounding.",
    "short_label": "PLATE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-867",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L867"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "Changing a direction or pressing INVERT or LOCK while this strumplate key sounds can replace its single note with a chord based on this key’s own degree.",
    "short_label": "PLATE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "530-564",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "588-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L588-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1050-1055",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1050-L1055"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "474-476",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L474-L476"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Plays white-key position 16 in the ascending scale from the tonic at C4, with all held white keys able to sound together.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "308-317",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L308-L317"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "266-269",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L266-L269"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Releases this scale note unless HOLD is on.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the sequence’s current step with the chord for degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout and the held direction, sounds it, and advances the entry cursor without a question; step playback does not retain this press’s inversion or chord lock.",
    "short_label": "WRITE CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Releases the live chord unless HOLD is on, leaving the entered sequence step in place.",
    "short_label": "ENTRY OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L896"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Plays the KICK 2 pad in the selected kit, with the seven pad assignments repeating across the white keys.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "14-15",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L14-L15"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L194"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Releases the KICK 2 pad and removes this key from AUTO-DRUM repeats.",
    "short_label": "KICK 2 OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "871-874",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L871-L874"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "191-194",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L191-L194"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Selects the BREAK style and restarts its loop from the beginning using the chosen variation.",
    "short_label": "BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "760-762",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L760-L762"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "17-20",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "202-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L202-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the selected drum loop running.",
    "short_label": "LOOP STAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Submits degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout as the timed answer, scores it by degree alone, and sounds the chart’s chord on a correct hit.",
    "short_label": "HIT CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the judged answer and chart chord unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L185"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Answers with degree 2 in DEGREE layout or its letter snapped to the selected scale in PIANO layout while the trainer waits, checking the held direction too in levels 3 and 4 and sounding the answer briefly.",
    "short_label": "ANSWER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "294-304",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L294-L304"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the submitted answer unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Mutes or unmutes looper layer 2 at once.",
    "short_label": "LAYER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-260",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L260"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves mixer settings unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "876-878",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L876-L878"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plays this key’s pad and repeats it at 1/4 until the pad or direction is released.",
    "short_label": "PAD 1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs4",
    "action": "Answers with this key’s degree and the UP change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds4",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds4",
    "action": "Answers with this key’s degree and the UP-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs4",
    "action": "Plays this key’s pad and repeats it at 1/8 until the pad or direction is released.",
    "short_label": "PAD 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs4",
    "action": "Answers with this key’s degree and the RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_gs4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-RIGHT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_gs4",
    "action": "Plays this key’s pad and repeats it at swing 1/16 until the pad or direction is released.",
    "short_label": "PAD SWING16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_gs4",
    "action": "Answers with this key’s degree and the DOWN-RIGHT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_as4",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_as4",
    "action": "Plays this key’s pad and repeats it at 1/16 until the pad or direction is released.",
    "short_label": "PAD 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_as4",
    "action": "Answers with this key’s degree and the DOWN change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_cs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and DOWN-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_cs5",
    "action": "Plays this key’s pad and repeats it at 1/16 triplet until the pad or direction is released.",
    "short_label": "PAD 1/16T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_cs5",
    "action": "Answers with this key’s degree and the DOWN-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_ds5",
    "action": "Replaces the current sequence step with this key’s degree, octave and LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_ds5",
    "action": "Plays this key’s pad and repeats it at 1/32 until the pad or direction is released.",
    "short_label": "PAD 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_ds5",
    "action": "Answers with this key’s degree and the LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press_while_holding:key_fs5",
    "action": "Replaces the current sequence step with this key’s degree, octave and UP-LEFT direction, sounds the chord, and advances the cursor without a question; the step keeps no inversion or chord lock.",
    "short_label": "STEP UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "166-174",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L166-L174"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "753-755",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L753-L755"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press_while_holding:key_fs5",
    "action": "Plays this key’s pad and repeats it at swing 1/8 until the pad or direction is released.",
    "short_label": "PAD SWING8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press_while_holding:key_fs5",
    "action": "Answers with this key’s degree and the UP-LEFT change, which must match the question in levels 3 and 4.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-246",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L246"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Toggles the selected drum lane’s hit on step 16 of the visible page and moves the cursor there, without writing flash.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "290-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L290-L308"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press_while_holding:key_cs5",
    "action": "Toggles the selected drum lane’s accent on step 16 of the visible page, adding a hit if needed.",
    "short_label": "ACCENT 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "299-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L299-L308"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "264-280",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L264-L280"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to G.",
    "short_label": "ROOT G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Cycles 0, hyphen and period in letter mode, or types + in number mode.",
    "short_label": "0 - .",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "28-31",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L28-L31"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "56-62",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L56-L62"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "125-157",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L125-L157"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "206-217",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L206-L217"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "52-58",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L52-L58"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, UP gives major/minor swap in DEFAULT or OG, major/minor swap in EXTEND, minor-major seventh in CHROM, or dominant seventh in BORROW.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, UP gives major/minor swap in DEFAULT or OG, major/minor swap in EXTEND, minor-major seventh in CHROM, or dominant seventh in BORROW.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, UP gives major/minor swap in DEFAULT or OG, major/minor swap in EXTEND, minor-major seventh in CHROM, or dominant seventh in BORROW.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, UP gives major/minor swap in DEFAULT or OG, major/minor swap in EXTEND, minor-major seventh in CHROM, or dominant seventh in BORROW.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, UP gives major/minor swap in DEFAULT or OG, major/minor swap in EXTEND, minor-major seventh in CHROM, or dominant seventh in BORROW.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, UP gives major/minor swap in DEFAULT or OG, major/minor swap in EXTEND, minor-major seventh in CHROM, or dominant seventh in BORROW.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at 1/4, using this direction instead of any earlier direction still held.",
    "short_label": "1/4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the UP modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 4, recording the hit if live recording is armed.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to C#.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles track 4 mute in working memory.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-218",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L218"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "hold",
    "action": "Temporarily mutes track 4 without changing its saved mute setting.",
    "short_label": "HOLD MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L10"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Ends this temporary mute of track 4.",
    "short_label": "END MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Deletes the character before the cursor.",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, UP-RIGHT gives dominant seventh in DEFAULT or OG, dominant ninth in EXTEND, altered dominant seventh in CHROM, or dominant seventh two semitones lower in BORROW.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, UP-RIGHT gives dominant seventh in DEFAULT or OG, dominant ninth in EXTEND, altered dominant seventh in CHROM, or dominant seventh two semitones lower in BORROW.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, UP-RIGHT gives dominant seventh in DEFAULT or OG, dominant ninth in EXTEND, altered dominant seventh in CHROM, or dominant seventh two semitones lower in BORROW.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, UP-RIGHT gives dominant seventh in DEFAULT or OG, dominant ninth in EXTEND, altered dominant seventh in CHROM, or dominant seventh two semitones lower in BORROW.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, UP-RIGHT gives dominant seventh in DEFAULT or OG, dominant ninth in EXTEND, altered dominant seventh in CHROM, or dominant seventh two semitones lower in BORROW.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, UP-RIGHT gives dominant seventh in DEFAULT or OG, dominant ninth in EXTEND, altered dominant seventh in CHROM, or dominant seventh two semitones lower in BORROW.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at swing 1/8, using this direction instead of any earlier direction still held.",
    "short_label": "SWING 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the UP-RIGHT modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 5, recording the hit if live recording is armed.",
    "short_label": "LANE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to D#.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Switches between letter and number typing.",
    "short_label": "ABC / 123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, RIGHT gives major or minor seventh, or half-diminished seventh for diminished chords in DEFAULT or OG, added eleventh, or minor eleventh for minor chords in EXTEND, the same chord one semitone higher in CHROM, or diminished seventh one semitone higher in BORROW.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, RIGHT gives major or minor seventh, or half-diminished seventh for diminished chords in DEFAULT or OG, added eleventh, or minor eleventh for minor chords in EXTEND, the same chord one semitone higher in CHROM, or diminished seventh one semitone higher in BORROW.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, RIGHT gives major or minor seventh, or half-diminished seventh for diminished chords in DEFAULT or OG, added eleventh, or minor eleventh for minor chords in EXTEND, the same chord one semitone higher in CHROM, or diminished seventh one semitone higher in BORROW.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, RIGHT gives major or minor seventh, or half-diminished seventh for diminished chords in DEFAULT or OG, added eleventh, or minor eleventh for minor chords in EXTEND, the same chord one semitone higher in CHROM, or diminished seventh one semitone higher in BORROW.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, RIGHT gives major or minor seventh, or half-diminished seventh for diminished chords in DEFAULT or OG, added eleventh, or minor eleventh for minor chords in EXTEND, the same chord one semitone higher in CHROM, or diminished seventh one semitone higher in BORROW.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, RIGHT gives major or minor seventh, or half-diminished seventh for diminished chords in DEFAULT or OG, added eleventh, or minor eleventh for minor chords in EXTEND, the same chord one semitone higher in CHROM, or diminished seventh one semitone higher in BORROW.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at 1/8, using this direction instead of any earlier direction still held.",
    "short_label": "1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the RIGHT modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 6, recording the hit if live recording is armed.",
    "short_label": "LANE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to F#.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Moves the naming cursor left.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, DOWN-RIGHT gives major or minor ninth, or half-diminished seventh for diminished chords in DEFAULT or OG, minor eleventh in EXTEND, half-diminished seventh in CHROM, or half-diminished seventh in BORROW.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, DOWN-RIGHT gives major or minor ninth, or half-diminished seventh for diminished chords in DEFAULT or OG, minor eleventh in EXTEND, half-diminished seventh in CHROM, or half-diminished seventh in BORROW.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, DOWN-RIGHT gives major or minor ninth, or half-diminished seventh for diminished chords in DEFAULT or OG, minor eleventh in EXTEND, half-diminished seventh in CHROM, or half-diminished seventh in BORROW.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, DOWN-RIGHT gives major or minor ninth, or half-diminished seventh for diminished chords in DEFAULT or OG, minor eleventh in EXTEND, half-diminished seventh in CHROM, or half-diminished seventh in BORROW.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, DOWN-RIGHT gives major or minor ninth, or half-diminished seventh for diminished chords in DEFAULT or OG, minor eleventh in EXTEND, half-diminished seventh in CHROM, or half-diminished seventh in BORROW.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, DOWN-RIGHT gives major or minor ninth, or half-diminished seventh for diminished chords in DEFAULT or OG, minor eleventh in EXTEND, half-diminished seventh in CHROM, or half-diminished seventh in BORROW.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at swing 1/16, using this direction instead of any earlier direction still held.",
    "short_label": "SWING 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the DOWN-RIGHT modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 7, recording the hit if live recording is armed.",
    "short_label": "LANE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to G#.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Inserts a space.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, DOWN gives suspended fourth in DEFAULT or OG, dominant seventh with sharp ninth in EXTEND, major thirteenth in CHROM, or major/minor swap in BORROW.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, DOWN gives suspended fourth in DEFAULT or OG, dominant seventh with sharp ninth in EXTEND, major thirteenth in CHROM, or major/minor swap in BORROW.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, DOWN gives suspended fourth in DEFAULT or OG, dominant seventh with sharp ninth in EXTEND, major thirteenth in CHROM, or major/minor swap in BORROW.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, DOWN gives suspended fourth in DEFAULT or OG, dominant seventh with sharp ninth in EXTEND, major thirteenth in CHROM, or major/minor swap in BORROW.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, DOWN gives suspended fourth in DEFAULT or OG, dominant seventh with sharp ninth in EXTEND, major thirteenth in CHROM, or major/minor swap in BORROW.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, DOWN gives suspended fourth in DEFAULT or OG, dominant seventh with sharp ninth in EXTEND, major thirteenth in CHROM, or major/minor swap in BORROW.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at 1/16, using this direction instead of any earlier direction still held.",
    "short_label": "1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the DOWN modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 8, recording the hit if live recording is armed.",
    "short_label": "LANE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to A#.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Moves the naming cursor right.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, DOWN-LEFT gives major sixth, or suspended second for minor chords in DEFAULT or OG, added ninth in EXTEND, sixth with ninth in CHROM, or minor seventh for major chords, or major seventh for minor chords in BORROW.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, DOWN-LEFT gives major sixth, or suspended second for minor chords in DEFAULT or OG, added ninth in EXTEND, sixth with ninth in CHROM, or minor seventh for major chords, or major seventh for minor chords in BORROW.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, DOWN-LEFT gives major sixth, or suspended second for minor chords in DEFAULT or OG, added ninth in EXTEND, sixth with ninth in CHROM, or minor seventh for major chords, or major seventh for minor chords in BORROW.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, DOWN-LEFT gives major sixth, or suspended second for minor chords in DEFAULT or OG, added ninth in EXTEND, sixth with ninth in CHROM, or minor seventh for major chords, or major seventh for minor chords in BORROW.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, DOWN-LEFT gives major sixth, or suspended second for minor chords in DEFAULT or OG, added ninth in EXTEND, sixth with ninth in CHROM, or minor seventh for major chords, or major seventh for minor chords in BORROW.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, DOWN-LEFT gives major sixth, or suspended second for minor chords in DEFAULT or OG, added ninth in EXTEND, sixth with ninth in CHROM, or minor seventh for major chords, or major seventh for minor chords in BORROW.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "DN-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at 1/16 triplet, using this direction instead of any earlier direction still held.",
    "short_label": "1/16 T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the DOWN-LEFT modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "hold",
    "action": "Makes the white keys edit accents instead of hits.",
    "short_label": "ACCENTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "304-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L304-L305"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to C#.",
    "short_label": "ROOT C#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Deletes the character before the cursor.",
    "short_label": "DELETE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, LEFT gives diminished, or minor for diminished chords in DEFAULT or OG, dominant seventh with suspended fourth in EXTEND, the same chord one semitone lower in CHROM, or major chord one semitone lower in BORROW.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, LEFT gives diminished, or minor for diminished chords in DEFAULT or OG, dominant seventh with suspended fourth in EXTEND, the same chord one semitone lower in CHROM, or major chord one semitone lower in BORROW.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, LEFT gives diminished, or minor for diminished chords in DEFAULT or OG, dominant seventh with suspended fourth in EXTEND, the same chord one semitone lower in CHROM, or major chord one semitone lower in BORROW.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, LEFT gives diminished, or minor for diminished chords in DEFAULT or OG, dominant seventh with suspended fourth in EXTEND, the same chord one semitone lower in CHROM, or major chord one semitone lower in BORROW.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, LEFT gives diminished, or minor for diminished chords in DEFAULT or OG, dominant seventh with suspended fourth in EXTEND, the same chord one semitone lower in CHROM, or major chord one semitone lower in BORROW.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, LEFT gives diminished, or minor for diminished chords in DEFAULT or OG, dominant seventh with suspended fourth in EXTEND, the same chord one semitone lower in CHROM, or major chord one semitone lower in BORROW.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at 1/32, using this direction instead of any earlier direction still held.",
    "short_label": "1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the LEFT modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Shows the previous sixteen-step grid page when the pattern has more than one page.",
    "short_label": "PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "267-274",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L267-L274"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "311-313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L311-L313"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to D#.",
    "short_label": "ROOT D#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Switches between letter and number typing.",
    "short_label": "ABC / 123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "play",
    "gesture": "hold",
    "action": "While held, UP-LEFT gives augmented in DEFAULT or OG, half-diminished seventh in EXTEND, dominant seventh with flat ninth in CHROM, or dominant seventh six semitones higher in BORROW.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "hold",
    "action": "While held, UP-LEFT gives augmented in DEFAULT or OG, half-diminished seventh in EXTEND, dominant seventh with flat ninth in CHROM, or dominant seventh six semitones higher in BORROW.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves LEAD note pitches unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "hold",
    "action": "While held, UP-LEFT gives augmented in DEFAULT or OG, half-diminished seventh in EXTEND, dominant seventh with flat ninth in CHROM, or dominant seventh six semitones higher in BORROW.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "hold",
    "action": "While held, UP-LEFT gives augmented in DEFAULT or OG, half-diminished seventh in EXTEND, dominant seventh with flat ninth in CHROM, or dominant seventh six semitones higher in BORROW.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "hold",
    "action": "While held, UP-LEFT gives augmented in DEFAULT or OG, half-diminished seventh in EXTEND, dominant seventh with flat ninth in CHROM, or dominant seventh six semitones higher in BORROW.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "hold",
    "action": "While held, UP-LEFT gives augmented in DEFAULT or OG, half-diminished seventh in EXTEND, dominant seventh with flat ninth in CHROM, or dominant seventh six semitones higher in BORROW.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-577",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L577"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Makes this direction the active chord modification, reshaping sounding white keys and taking priority over any earlier direction still held.",
    "short_label": "UP-LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Returns to the most recently pressed direction still held, or removes the direction change when none remains.",
    "short_label": "RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1030-1059",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1030-L1059"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "hold",
    "action": "Repeats every held drum pad at swing 1/8, using this direction instead of any earlier direction still held.",
    "short_label": "SWING 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "196-199",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L196-L199"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-305",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L305"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Returns AUTO-DRUM to the previous held direction’s rate, or ends repeats when no direction remains.",
    "short_label": "AUTO RETURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "294-308",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L294-L308"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves the playing drum loop unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "210-223",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L210-L223"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves CHORD HIRO’s degree check unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "hold",
    "action": "Supplies the UP-LEFT modification for answers in levels 3 and 4, and shapes chord answers at other chord levels.",
    "short_label": "ANSWER UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "73-76",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L73-L76"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "218-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L218-L230"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/harmony.c",
      "lines": "59-117",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L59-L117"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Returns to the previous held answer direction, or to an unmodified answer when none remains.",
    "short_label": "ANSWER RESET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "225-230",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L225-L230"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves mixer settings unchanged while remembering this as the active direction.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Returns to the previous held direction without changing this mode’s key action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "567-589",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L567-L589"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Shows the next sixteen-step grid page when the pattern has more than one page.",
    "short_label": "PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "267-274",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L267-L274"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "311-313",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L311-L313"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to F#.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-226",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L226"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "393-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L393-L396"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Moves the naming cursor left.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Cycles every held chord key through root position, first inversion and second inversion.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Cycles every held chord key through root position, first inversion and second inversion.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Leaves this mode’s notes, loops, game or mixer action unchanged while advancing inversion choices for held white keys.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chord.c",
      "lines": "89-102",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chord.c#L89-L102"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Cycles every held chord key through root position, first inversion and second inversion.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Cycles every held chord key through root position, first inversion and second inversion.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Cycles every held chord key through root position, first inversion and second inversion.",
    "short_label": "INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Replaces the current sequence step with a rest and advances the entry cursor without a question.",
    "short_label": "WRITE REST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "594-596",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L594-L596"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "176-179",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L176-L179"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Leaves this mode’s notes, loops, game or mixer action unchanged while advancing inversion choices for held white keys.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L207"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Leaves this mode’s notes, loops, game or mixer action unchanged while advancing inversion choices for held white keys.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "182-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L182-L207"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Leaves this mode’s notes, loops, game or mixer action unchanged while advancing inversion choices for held white keys.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "163-185",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L163-L185"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Replays the question when the trainer is waiting for an answer.",
    "short_label": "REPLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "598-600",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L598-L600"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcgame.c",
      "lines": "209-215",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcgame.c#L209-L215"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Leaves this mode’s notes, loops, game or mixer action unchanged while advancing inversion choices for held white keys.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "255-262",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L255-L262"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves the action from the press unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L606"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "Advances the held chord key to its next inversion, clearing that inversion on release unless the key is locked.",
    "short_label": "INVERT HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "603-606",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L603-L606"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "880-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L880-L887"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 1, recording the hit if live recording is armed.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to F#.",
    "short_label": "ROOT F#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles track 1 mute in working memory.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-218",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L218"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "hold",
    "action": "Temporarily mutes track 1 without changing its saved mute setting.",
    "short_label": "HOLD MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L10"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Ends this temporary mute of track 1.",
    "short_label": "END MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Moves the naming cursor left.",
    "short_label": "LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Unlocks held chord keys that are locked, or records each held key’s direction change or inversion for later presses; the still-held direction is applied again until it is released.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves chord locks unchanged.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_f3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_f3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_f3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_f3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_f3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_g3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_g3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_g3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_g3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_g3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_a3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_a3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_a3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_a3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_a3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_b3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_b3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_b3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_b3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_b3+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_c4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_c4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_c4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_c4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_c4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_d4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_d4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_d4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_d4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_d4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "press_while_holding:key_e4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press_while_holding:key_e4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press_while_holding:key_e4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press_while_holding:key_e4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4",
    "action": "Locks an inverted held chord without a direction, or unlocks it if it is already locked.",
    "short_label": "LOCK INVERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_cs4",
    "action": "Locks the held key’s UP chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_ds4",
    "action": "Locks the held key’s UP-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_fs4",
    "action": "Locks the held key’s RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_gs4",
    "action": "Locks the held key’s DOWN-RIGHT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_as4",
    "action": "Locks the held key’s DOWN chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_cs5",
    "action": "Locks the held key’s DOWN-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK DL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_ds5",
    "action": "Locks the held key’s LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press_while_holding:key_e4+key_fs5",
    "action": "Locks the held key’s UP-LEFT chord change and inversion, or unlocks that key if already locked; a still-held direction is applied again until released.",
    "short_label": "LOCK UL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "608-623",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L608-L623"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "363-368",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L363-L368"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 2, recording the hit if live recording is armed.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to G#.",
    "short_label": "ROOT G#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles track 2 mute in working memory.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-218",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L218"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "hold",
    "action": "Temporarily mutes track 2 without changing its saved mute setting.",
    "short_label": "HOLD MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L10"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Ends this temporary mute of track 2.",
    "short_label": "END MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Inserts a space.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "play",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "strum",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "lead",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "press",
    "action": "Toggles the HOLD indicator in DRONE without adding sustain to its chord or ending the drone when switched off.",
    "short_label": "DRONE HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-884",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L884"
     }
    ]
   },
   {
    "mode": "drone",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "repeat",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "sequencer",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "drum",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "drum_loop",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "hiro",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "ear",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "press",
    "action": "Toggles HOLD, keeping released chord or LEAD keys sounding until HOLD is switched off while plate, drum, loop, game and mixer keys keep their own release behavior.",
    "short_label": "HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "625-628",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L625-L628"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "859-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L859-L883"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "1033-1047",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L1033-L1047"
     }
    ]
   },
   {
    "mode": "mixer",
    "gesture": "release",
    "action": "Leaves HOLD on or off as selected by the press.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "592-593",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L592-L593"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "press",
    "action": "Plays the selected track through its octave, scale and engine key mapping; CHRD HI uses the chord-machine key roles instead.",
    "short_label": "PLAY NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "77-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L77-L105"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "448-482",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L448-L482"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "release",
    "action": "With CHRD HI off, releases this key’s note on its original track; with HI on, uses the selected chord-mode release behavior, including releasing a black-key direction rather than a note.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-503",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L503"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-494",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L494"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "press",
    "action": "Writes the played note or chord into the cursor step while live recording is not running, keeping up to four notes in poly mode.",
    "short_label": "ENTER NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "559-595",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L559-L595"
     }
    ]
   },
   {
    "mode": "synth_step",
    "gesture": "release",
    "action": "Advances the cursor after all note-entry keys have been released.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "596-597",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L596-L597"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "press",
    "action": "Plays its slice and selects that slice’s marker for editing.",
    "short_label": "PICK SLICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "195-204",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L195-L204"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "press",
    "action": "Selects and plays drum lane 3, recording the hit if live recording is armed.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "309-310",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L309-L310"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "466-469",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L466-L469"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "press_while_holding:button_sel",
    "action": "Sets the selected track’s scale root to A#.",
    "short_label": "ROOT A#",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "227-228",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L227-L228"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "press_while_holding:button_glo",
    "action": "Toggles track 3 mute in working memory.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "215-218",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L215-L218"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "press_while_holding:button_edit",
    "action": "Does nothing in the EDIT shortcut layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "229-236",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L229-L236"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "hold",
    "action": "Temporarily mutes track 3 without changing its saved mute setting.",
    "short_label": "HOLD MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/perform.c",
      "lines": "3-10",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/perform.c#L3-L10"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "release",
    "action": "Ends this temporary mute of track 3.",
    "short_label": "END MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "487-490",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L487-L490"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "press",
    "action": "Moves the naming cursor right.",
    "short_label": "RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "64-73",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L64-L73"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "159-187",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L159-L187"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "hold",
    "action": "Repeats this naming edit after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "REPEAT EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "255-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L255-L265"
     }
    ]
   }
  ],
  "jack_usb_c": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "USB AUDIO",
    "action": "Connects USB MIDI in and out, stereo audio capture and firmware updates, with editor and backup support present in source but no working editor route established.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/felucca.c",
      "lines": "10-29",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/felucca.c#L10-L29"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/usb.c",
      "lines": "159-207",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/usb.c#L159-L207"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "270-277",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L270-L277"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "BACKUP",
    "action": "A working v0.3 editor or backup route has not been established; the repository contains editor source, so record important settings and capture audio externally before switching rather than relying on Save backup or P1–P4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/editor_backup.c",
      "lines": "8-69",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor_backup.c#L8-L69"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "web/fm1backup.js",
      "lines": "89-107",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/fm1backup.js#L89-L107"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "web/editor.html",
      "lines": "3213-3221",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/editor.html#L3213-L3221"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "RESTORE",
    "action": "If an editor is made operational and verified, its Restore backup asks once in the browser, then replaces included stored items, including empty slots, and loads the current synth project last without undo; interruption can leave a partial restore, and an older file without an FM6 bank leaves that bank unchanged.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/editor_backup.c",
      "lines": "85-147",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor_backup.c#L85-L147"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "web/fm1backup.js",
      "lines": "108-142",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/fm1backup.js#L108-L142"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "web/editor.html",
      "lines": "3223-3233",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/editor.html#L3223-L3233"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "press",
    "short_label": "MIDI OUT",
    "action": "Sends chord, arpeggiator, chord-sequence, looper and drum-loop note events over USB MIDI on each track’s channel when USB is configured and its output queue has room.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/chordmachine.c",
      "lines": "414-423",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L414-L423"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hclooper.c",
      "lines": "177-184",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L177-L184"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcseq.c",
      "lines": "213-233",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L213-L233"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/usb.c",
      "lines": "150-157",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/usb.c#L150-L157"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "FACTORY",
    "action": "Sending factory yes through the USB serial console immediately erases settings and calibration, all P1–P4/A–D projects, user sounds and the FM6 bank, then reboots without another question or undo while uploaded samples remain.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/console.c",
      "lines": "440-446",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/console.c#L440-L446"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "100-112",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L100-L112"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "282-286",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L282-L286"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/storage.c",
      "lines": "121-133",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/storage.c#L121-L133"
     }
    ]
   }
  ],
  "jack_midi_in": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "MIDI IN",
    "action": "Receives MIDI through the input jack with the hidden synth’s routing and clock settings; the chord SOUND menu’s MIDI IN choice does not disable incoming notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/midi_uart.c",
      "lines": "22-24",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/midi_uart.c#L22-L24"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/seq.c",
      "lines": "745-759",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L745-L759"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/midi_control.c",
      "lines": "264-267",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/midi_control.c#L264-L267"
     }
    ]
   }
  ],
  "jack_audio_out": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "OUTPUT",
    "action": "Uses HOT or LINE output, with LINE reducing the master level by 10 dB when chosen on the SOUND menu.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "527",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L527"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hcfx.c",
      "lines": "104-107",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcfx.c#L104-L107"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_fx": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "sound_menu",
    "gesture": "lit",
    "short_label": "SOUND",
    "action": "The SOUND menu is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "blinking",
    "action": "Marks the open shortcut layer with a half-second blink cycle.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "168-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L168-L169"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "key_menu",
    "gesture": "lit",
    "short_label": "KEY",
    "action": "The KEY menu is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "blinking",
    "action": "Marks the open shortcut layer with a half-second blink cycle.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "168-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L168-L169"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "env_list",
    "gesture": "lit",
    "short_label": "ENVELOPE",
    "action": "The persistent envelope list is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "lfo_list",
    "gesture": "lit",
    "short_label": "VIBRATO",
    "action": "The persistent vibrato list is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "mode_menu",
    "gesture": "lit",
    "short_label": "MODE",
    "action": "The MODE menu is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "blinking",
    "action": "Marks the open shortcut layer with a half-second blink cycle.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "168-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L168-L169"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "blinking",
    "action": "Marks the open shortcut layer with a half-second blink cycle.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "168-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L168-L169"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "lit",
    "short_label": "HOME",
    "action": "The chord home screen is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "looper",
    "gesture": "lit",
    "short_label": "LOOPER",
    "action": "The LOOPER menu is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "env_list",
    "gesture": "lit",
    "short_label": "PICK LIST",
    "action": "A choice list is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "lfo_list",
    "gesture": "lit",
    "short_label": "PICK LIST",
    "action": "A choice list is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "sound_list",
    "gesture": "lit",
    "short_label": "PICK LIST",
    "action": "A choice list is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "mode_list",
    "gesture": "lit",
    "short_label": "PICK LIST",
    "action": "A choice list is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "presets",
    "gesture": "lit",
    "short_label": "PRESETS",
    "action": "The PRESETS menu is visible.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "873-881",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L873-L881"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "lit",
    "short_label": "ARP",
    "action": "ARP is the selected play mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "882-883",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L882-L883"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "flash",
    "action": "Flashes to the beat while any track’s arpeggio has held notes, with a longer first beat and inverted flashes on the ARP page.",
    "short_label": "ARP BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "80-87",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L80-L87"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "166-167",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L166-L167"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Marks the currently displayed page family; inverted lights make active indicators dark instead.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "164-169",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L164-L169"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "183-188",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L183-L188"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "lit",
    "short_label": "LOOP RUNS",
    "action": "The looper transport is running; chord-sequence and drum-loop playback do not independently light it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "885",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L885"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "off",
    "action": "The orange PLAY light stays dark during playback.",
    "short_label": "ORANGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "181-191",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L181-L191"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "The green PLAY light marks running playback.",
    "short_label": "PLAYING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "190-191",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L190-L191"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "lit",
    "short_label": "RECORDING",
    "action": "At least one looper layer is recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "884",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L884"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "blinking",
    "short_label": "ARMED",
    "action": "At least one looper layer is armed and none is recording, blinking in 250 ms intervals.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "884",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L884"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Shows that at least one track is armed for recording, or goes dark when active under inverted lights.",
    "short_label": "RECORD ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "170",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L170"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "lit",
    "short_label": "OCTAVE",
    "action": "The keyboard octave is below zero.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "886-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L886-L887"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Lights when the keyboard is shifted below its original octave, or marks Back in a question, menu or action page.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE GLOW",
    "action": "Glows faintly when the chord interface has not lit it for an active function.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "892-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L892-L896"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "lit",
    "short_label": "OCTAVE",
    "action": "The keyboard octave is above zero.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "886-887",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L886-L887"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Lights above the original octave and blinks when confirmation or the selected action is available.",
    "short_label": "OCTAVE / OK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_menu",
    "gesture": "blinking",
    "action": "Blinks while the menu list can accept OCT+; it does not blink on ABOUT.",
    "short_label": "OK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_user",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_overwrite_project",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_erase_user",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_load_phrase",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_motion",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_delete_row",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_song",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_init_sound",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_confirm_clear_steps",
    "gesture": "blinking",
    "action": "Blinks while OCT+ can confirm the question.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     }
    ]
   },
   {
    "mode": "synth_user",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   },
   {
    "mode": "synth_project",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   },
   {
    "mode": "synth_phrases",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   },
   {
    "mode": "synth_tools",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   },
   {
    "mode": "synth_song",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   },
   {
    "mode": "synth_motion",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "blinking",
    "action": "Blinks when the selected action is available.",
    "short_label": "ACTION READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "44-55",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L44-L55"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui.c",
      "lines": "1038-1067",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L1038-L1067"
     }
    ]
   }
  ],
  "led_play_stop_green": [
   {
    "mode": "chord_ui",
    "gesture": "off",
    "short_label": "-",
    "action": "Stays off in the chord interface.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "869-897",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L869-L897"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "chord_ui",
    "gesture": "lit",
    "short_label": "HELD KEYS",
    "action": "Shows physically held or latched keys, with A#3 also lit while HOLD is on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "872",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L872"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "888-890",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L888-L890"
     }
    ]
   },
   {
    "mode": "chord_ui",
    "gesture": "dim",
    "short_label": "IDLE KEYS",
    "action": "All keys glow faintly beneath the held-key indication.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "888-896",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L888-L896"
     }
    ]
   },
   {
    "mode": "synth_any",
    "gesture": "lit",
    "action": "Shows held notes and the selected track’s sounding sequence or arpeggio notes, with dim idle lights unless inverted lights are selected.",
    "short_label": "NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "90-144",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L90-L144"
     }
    ]
   },
   {
    "mode": "synth_drum_grid",
    "gesture": "lit",
    "action": "Shows the selected lane’s steps, accents while ACC is held, the current lane and available page keys, with the playing step inverted.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "58-77",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L58-L77"
     }
    ]
   },
   {
    "mode": "synth_layer_fx",
    "gesture": "lit",
    "action": "Available effect keys blink, held effects light steadily, and unavailable buffer effects stay dark.",
    "short_label": "SHORTCUTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "325-349",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L325-L349"
     }
    ]
   },
   {
    "mode": "synth_layer_glo",
    "gesture": "lit",
    "action": "Mute keys light for sounding tracks, solo keys light while held, and available solo, unmute-all and tap keys blink.",
    "short_label": "SHORTCUTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "325-349",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L325-L349"
     }
    ]
   },
   {
    "mode": "synth_layer_scl",
    "gesture": "lit",
    "action": "Root-note keys stay lit while the other scale tones blink.",
    "short_label": "SHORTCUTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "325-349",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L325-L349"
     }
    ]
   },
   {
    "mode": "synth_layer_edit",
    "gesture": "lit",
    "action": "The selected engine stays lit while other engines and available INIT blink.",
    "short_label": "SHORTCUTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "325-349",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L325-L349"
     }
    ]
   },
   {
    "mode": "synth_name",
    "gesture": "lit",
    "action": "Every typing or editing key lights, while the key whose character group is cycling blinks.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_name.c",
      "lines": "276-284",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_name.c#L276-L284"
     }
    ]
   },
   {
    "mode": "synth_slices",
    "gesture": "lit",
    "action": "Also lights the keys that play the selected slice.",
    "short_label": "SLICE KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_slice.c",
      "lines": "207-216",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_slice.c#L207-L216"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_a3",
   "led_a4",
   "led_as3",
   "led_as4",
   "led_b3",
   "led_b4",
   "led_c4",
   "led_c5",
   "led_cs4",
   "led_cs5",
   "led_d4",
   "led_d5",
   "led_ds4",
   "led_ds5",
   "led_e4",
   "led_e5",
   "led_f3",
   "led_f4",
   "led_f5",
   "led_fs3",
   "led_fs4",
   "led_fs5",
   "led_g3",
   "led_g4",
   "led_g5",
   "led_gs3",
   "led_gs4"
  ]
 },
 "switching_note": {
  "kept_on_unit": "P1/A, P2/B, P3/C and P4/D share their saved music with synth PROJECT A–D, including key, scale and tempo but excluding keyboard octave, chord-sequence steps and looper recordings; their separate chord settings are unreliable because of the preset-save fault, and startup also replaces restored live chord settings with defaults. From the flash atlas: install (own update loader): Rewrites each differing program sector; does not touch the flash head. The incoming flash.bin must be at least 0x93000 bytes (not an exact-size requirement), and its app header must decrypt for this chip (accepted package; sectors are only erased when different). after successful install (own update loader): Clears valid update records after installing; saved projects, sounds and samples are not erased by this cleanup (After an install, erases only a 4 KiB sector whose last 256 bytes hold a valid update record (marker 0x5441 at +6 and a matching nonzero CRC16 over bytes 2..79): in practice the family staging-record sector 0xE4000 and, on a first install from stock, stock’s record sector 0xE8000. Saved music does not hold that record, so it is not at risk from the cleanup. This loader does not skip 0x97000–0xDFFFF). startup conditional cleanup: Erases all five sectors when the first 4 bytes at E0000 or the first 8 bytes at E4F00 contain anything nonblank, even foreign data. Not every startup writes (first-byte probe is nonblank). installer upgrade entry or failed package handling: A successful stage erases then programs the five-sector area; ANY ota_stage failure also calls ota_unstage, so even a refusal before staging can erase foreign data there. The host success reply is not an owner confirmation (installer upgrade command accepted by the running app). factory reset: Erases both copies of all 8 objects: settings and calibration, all 4 projects/chord presets, both 16-sound banks and FM6 bank; keeps uploaded samples and their slices. HOME+SAVE at startup must remain held through 3 s countdown; console factory yes calls the same eraser. No undo (hold HOME+SAVE through the startup countdown or send factory yes in console). What fm1-chord writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over fm1-chord's is in when_you_leave.",
  "lost": "Chord-sequence steps and looper recordings disappear after power-off and are absent from P1–P4 and editor backups; switching firmware can also replace stored projects, sounds, settings and samples. From the flash atlas: Other firmwares reading fm1-chord's data: Felucca lists fm1-chord's user sounds 1-16; user sounds 17-32, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty); Felucca takes over fm1-chord's FM6 bank B1-B27, converting them (If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up); Felucca reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Only data in this sample slot is read. Other saved work is separate); Rainbow Mode lists fm1-chord's user sounds 1-16; user sounds 17-32, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty); Rainbow Mode takes over fm1-chord's FM6 bank B1-B27, converting them (If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up); Rainbow Mode reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Only data in this sample slot is read. Other saved work is separate); Felucca [Salt] reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions); WaveLoop FM-1 lists fm1-chord's chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32, but plays them differently (Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here; Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty); WaveLoop FM-1 takes over fm1-chord's FM6 bank B1-B27, converting them (If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up); WaveLoop FM-1 reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers (Only data in this sample slot is read. Other saved work is separate; Saved samples may have no slice positions set by you); SLOOP reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it); SLOOP DX7 Banks reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP Floyd FM reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); FM1 Quest reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers (USR1 plays only if its audio and zones fit Quest’s smaller sample slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); JIANT takes over fm1-chord's user sounds 1-16; user sounds 17-32; FM6 bank B1-B27, converting them (JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking; Only patches linked to compatible FM6 user sounds are copied. The old bank stays available to Chord until JIANT's next FM6 save); ChoralRoot takes over fm1-chord's FM6 bank B1-B27, converting them (This applies only if the older 27-slot bank is still stored. A newer bank of FM6 patches in the same storage is separate and is not imported); ChoralRoot lists fm1-chord's user sounds 1-16; user sounds 17-32, but plays them differently (Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from); GHOULBOX lists fm1-chord's chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32, but plays them differently (CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different; CHORD sounds use GHOULBOX's GURDY engine, so they sound different); GHOULBOX takes over fm1-chord's FM6 bank B1-B27, converting them; GHOULBOX reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; MAKU takes over fm1-chord's chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27, converting them; MAKU reads and uses fm1-chord's user sounds 1-16; user sounds 17-32; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (MAKU leaves these sample bytes in place, but its controls use built-in material; these uploaded samples are not available to play here); Jangada reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; Skiff takes over fm1-chord's chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27, converting them (CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound); Skiff lists fm1-chord's user sounds 1-16; user sounds 17-32, but plays them differently (The same saved sound format does not guarantee the same sound or pattern playback); Skiff reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Skiff uses its own sound engines, so saved loops or slices can play differently); Hortator lists fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers, but plays them differently (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); ORBIT takes over fm1-chord's user sounds 1-16; user sounds 17-32, converting them (Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play); ORBIT reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); PIGEON reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same; Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio); winampFM Synth reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); FM1 Move reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); X0X lists fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers, but plays them differently (Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used); Jangada converts only older version 1 sounds in this group. Newer sound versions look empty, and saving anywhere in the group drops them from the rewritten group.. What fm1-chord reads of other firmwares' data: fm1-chord takes over Felucca's settings, button calibration, favourites, MIDI LEARN map; user presets 1-16; user presets 17-32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over SLOOP's user sounds U01-U16; user sounds U17-U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses SLOOP's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over JIANT's settings, calibration, favourites, MENU options; user sounds U01-U16; user sounds U17-U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord takes over GHOULBOX's settings and panel calibration; user sounds 1–16; user sounds 17–32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over Hortator's settings and panel calibration, converting them; fm1-chord reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over Skiff's settings, calibration and favourites; user sound bank 1; user sound bank 2, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord lists sloopDX's user presets 1–16; user presets 17–32, but plays them differently (fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept); fm1-chord takes over Rainbow Mode's Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes; user sounds U01–U16, names and sixteen-step patterns without automation; user sounds U17–U32, names and sixteen-step patterns without automation, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses Rainbow Mode's your old FM6 bank (B1–B27); User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over MAKU's settings and calibration; inherited user preset bank 1; inherited user preset bank 2, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses MAKU's inherited user sample 1; inherited user sample 2; inherited user sample 3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses SLOOP DX7 Banks's user sample USR1; user sample USR2; user sample USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over WaveLoop FM-1's settings, calibration and favourites; user sounds 1–16; user sounds 17–32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord lists WaveLoop FM-1's song 1; song 2; song 3; last session saved for the next start, but plays them differently (Loading a project does not promise identical sound. Chord presets also need their separately saved fm1-chord settings); fm1-chord reads and uses WaveLoop FM-1's user sample USR1; user sample USR2 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord reads and uses ORBIT's sample slot USR1; sample slot USR2; sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over SLOOP Floyd FM's user sounds U01–U16; user sounds U17–U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses SLOOP Floyd FM's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over winampFM Synth's user sounds 1-16; user sounds 17-32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord lists Felucca [Salt]'s project 1; project 2; project 3; project 4, but plays them differently (Loading a project does not promise identical sound. Chord presets also need their separately saved fm1-chord settings); fm1-chord takes over Felucca [Salt]'s user sounds U01-U16; user sounds U17-U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses Felucca [Salt]'s user sample USR1; user sample USR2; user sample USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over PIGEON's preferences, MIDI LEARN and panel calibration; older user preset bank 1; older user preset bank 2, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses PIGEON's older FM6 patch bank PIGEON no longer uses; user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over FM1 Move's user sounds U01–U16; user sounds U17–U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses FM1 Move's sample slot USR1; sample slot USR2; sample slot USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); fm1-chord takes over FM1 Quest's user sounds U01–U16; user sounds U17–U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses FM1 Quest's sample USR1 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "A working v0.3 editor or backup route has not been established; the repository contains editor source, so record important settings and capture audio externally before switching rather than relying on Save backup or P1–P4.",
  "restore": "If an editor is made operational and verified, its Restore backup asks once in the browser, then replaces included stored items, including empty slots, and loads the current synth project last without undo; interruption can leave a partial restore, and an older file without an FM6 bank leaves that bank unchanged.",
  "going_back": "v0.2 compatibility has not been established, and no working v0.3 backup route is confirmed; record settings and audio before changing version, preserve any backup files already obtained, and keep earlier files separate.",
  "overwrites_before_atlas": "See the switching advice in Before you switch firmware for the affected saved work. Back up with the firmware that made the work before installing or first starting fm1-chord; for chord itself, no working editor backup route is established, so write down important values and record audio externally. Other firmwares can overwrite its work at startup or automatically during use. These are possible losses where the data is present and overlaps the write; unreadable foreign work receives no protective question, and an older surviving copy is not a backup. During first ordinary use or after a later chord edit, about three seconds of steady live state can cause an automatic settings write without an edit or question; closing the synth menu, first opening a shortcut layer, changing favourites, running calibration or sending preferences can write the same saved settings. P1–P4 saves replace the matching synth A–D project and write chord settings without a question, while synth PROJECT saves replace that same music after asking about a readable occupied slot; project-save commands from a host can also write it. Saving P1 damages P2’s chord settings, P2 damages P3’s and P3 damages P4’s; P4 writes beyond its working storage, and no stored overwrite has panel undo. Saving, erasing, renaming or sending a user sound rewrites its whole sixteen-sound bank; a panel question protects only a readable occupied target, so saving an empty slot can still rewrite other sounds, and removing a favourite can also write settings. Imported banks can be written back with converted sounds, so returning to the original firmware may not recover their earlier sound; sloopDX sounds can already play through the wrong engine here, and separate FM6 companion voices are not recovered. A host or operational editor can write or erase an FM6 bank patch, rewriting its containing bank without an on-unit question. Sending or clearing an uploaded sample can erase its header and the affected audio sectors, with a full clear erasing the whole selected slot and no on-unit question. How much is replaced depends on the chosen slot and upload length. After leaving SLICES with the synth transport stopped, changed slice markers can erase the unused tail of a valid, sufficiently short uploaded sample without a question or undo. At startup, data where the firmware checks its update area can cause that whole temporary update area to be erased without a question; other stored bytes alone do not trigger this cleanup. The installer writes the program area, and beginning an update from fm1-chord can erase its temporary update area even when the package is rejected, without an on-unit question. After installation, the loader erases only a sector that holds a valid update record; saved projects, sounds and samples are not erased by this cleanup. Holding HOME and SAVE through the startup countdown, or sending factory yes through the USB serial console, erases both copies of saved settings, all shared P1–P4/A–D projects, user-sound banks and the FM6 bank without undo; uploaded samples remain. A working v0.3 editor route has not been established, but a compatible host can replace the settings, shared projects, sound banks, FM6 bank and samples included in a backup; the source browser editor asks once, then writes each included item, including empty slots, without an on-unit undo. Interruption can leave a partial restore; a file without an FM6 bank leaves that bank unchanged, and the stored chord blocks retain their save faults.\n\nWrites to shared storage can also remove other firmwares’ unfinished restores and pending updates; keep the original files.\n\nChord’s chord-preset and project saves, renames, sends to the FM-1 and restores, user-sound saves, renames, erases, sends to the FM-1 and restores, USR1 sample uploads, erases, slice edits and restores, and factory reset can also replace ChoralRoot’s legacy sounds 1–32, VA patches, FM6 patches 1–32, CZ patches 1–32 and FM TONE patches, kept for returning to ChoralRoot 0.21 or older.",
  "atlas_status": "Back up in the firmware that made the work before installing or first starting it. See the switching advice in Before you switch firmware.",
  "source": [
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/hui.c",
    "lines": "233-296",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L296"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/hui.c",
    "lines": "304-338",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L304-L338"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/project.c",
    "lines": "651-674",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L651-L674"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/main.c",
    "lines": "140-177",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L140-L177"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/main.c",
    "lines": "195-210",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L195-L210"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/chordmachine.c",
    "lines": "182-192",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L182-L192"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/editor_backup.c",
    "lines": "8-69",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor_backup.c#L8-L69"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "web/fm1backup.js",
    "lines": "89-142",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/fm1backup.js#L89-L142"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "web/editor.html",
    "lines": "3213-3233",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/editor.html#L3213-L3233"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/ota.c",
    "lines": "382-396",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ota.c#L382-L396"
   },
   {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/loader/ldr_core.c",
    "lines": "124-135",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/loader/ldr_core.c#L124-L135"
   }
  ],
  "overlap_precautions": "See the switching advice in this section for the affected saved work.",
  "trigger_precautions": [
   {
    "id": "settings",
    "trigger": "First ordinary start, autosave and other settings writes",
    "paragraph": "During first ordinary use or after a later chord edit, about three seconds of steady live state can cause an automatic settings write without an edit or question; closing the synth menu, first opening a shortcut layer, changing favourites, running calibration or sending preferences can write the same saved settings. See the switching advice in Before you switch firmware for the affected saved work.",
    "reader_objects": [
     "chord.settings"
    ],
    "foreign_rows": [
     0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "282-296",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L282-L296"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "934-965",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L934-L965"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "208-210",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L208-L210"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_menu.c",
      "lines": "248-265",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L265"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_layer.c",
      "lines": "99-106",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_layer.c#L99-L106"
     }
    ]
   },
   {
    "id": "preset_project",
    "trigger": "P1–P4 saves and synth PROJECT A–D saves",
    "paragraph": "P1–P4 saves replace the matching synth A–D project and write chord settings without a question, while synth PROJECT saves replace that same music after asking about a readable occupied slot; project-save commands from a host can also write it. See the switching advice in Before you switch firmware for the affected saved work. Saving P1 damages P2’s chord settings, P2 damages P3’s and P3 damages P4’s; P4 writes beyond its working storage, and no stored overwrite has panel undo.",
    "reader_objects": [
     "chord.settings",
     "chord.project_a",
     "chord.project_b",
     "chord.project_c",
     "chord.project_d"
    ],
    "foreign_rows": [
     0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23,
     24,
     25,
     26,
     27,
     28,
     29,
     30,
     31,
     32,
     33,
     34,
     35,
     36,
     37,
     38,
     39,
     40,
     41,
     42,
     43,
     44,
     45,
     46,
     47,
     48,
     49,
     50,
     51,
     52,
     53,
     54,
     55,
     56,
     57,
     58,
     59,
     60,
     61,
     62,
     63,
     64,
     65,
     66,
     67,
     68,
     69,
     70,
     71,
     72,
     73,
     74,
     75,
     76,
     77,
     78,
     79,
     80,
     81,
     82,
     83,
     84,
     85,
     86,
     87,
     88,
     89,
     90,
     91,
     92,
     93,
     94,
     95,
     96,
     97,
     98,
     99,
     100
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/hui.c",
      "lines": "304-338",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L304-L338"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ui_input.c",
      "lines": "516-525",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_input.c#L516-L525"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/project.c",
      "lines": "679-704",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L679-L704"
     }
    ]
   },
   {
    "id": "user_banks",
    "trigger": "User-sound saves, erase, rename and sends",
    "paragraph": "Saving, erasing, renaming or sending a user sound rewrites its whole sixteen-sound bank; a panel question protects only a readable occupied target, so saving an empty slot can still rewrite other sounds, and removing a favourite can also write settings. See the switching advice in Before you switch firmware for the affected saved work. Imported banks can be written back with converted sounds, so returning to the original firmware may not recover their earlier sound; sloopDX sounds can already play through the wrong engine here, and separate FM6 companion voices are not recovered.",
    "reader_objects": [
     "chord.user_presets_1",
     "chord.user_presets_2",
     "chord.settings"
    ],
    "foreign_rows": [
     0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     101,
     102,
     103,
     104,
     105,
     106,
     107,
     108,
     109,
     110,
     111,
     112,
     113,
     114,
     115,
     116,
     117,
     118,
     119,
     120,
     121,
     122,
     123,
     124,
     125,
     126,
     127,
     128,
     129,
     130,
     131,
     132,
     133,
     134,
     135,
     136,
     137,
     138
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/upreset.c",
      "lines": "239-278",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/upreset.c#L239-L278"
     }
    ]
   },
   {
    "id": "fm6",
    "trigger": "FM6 bank sends and erase",
    "paragraph": "A host or operational editor can write or erase an FM6 bank patch, rewriting its containing bank without an on-unit question. See the switching advice in Before you switch firmware for the affected saved work.",
    "reader_objects": [
     "chord.fm6_bank"
    ],
    "foreign_rows": [
     139,
     140,
     141,
     142,
     143,
     144,
     146,
     147,
     148,
     149,
     150,
     151,
     152,
     153,
     154,
     156,
     157
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/fm6_bank.c",
      "lines": "58-106",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/fm6_bank.c#L58-L106"
     }
    ]
   },
   {
    "id": "samples",
    "trigger": "Sample sends, uploads and clear",
    "paragraph": "Sending or clearing an uploaded sample can erase its header and the affected audio sectors, with a full clear erasing the whole selected slot and no on-unit question. See the switching advice in Before you switch firmware for the affected saved work. How much is replaced depends on the chosen slot and upload length.",
    "reader_objects": [
     "chord.sample_usr1",
     "chord.sample_usr2",
     "chord.sample_usr3"
    ],
    "foreign_rows": [
     159,
     160,
     161,
     165,
     166,
     167,
     168,
     169,
     170,
     171,
     172,
     173,
     174,
     175,
     176,
     177,
     178,
     179,
     181,
     183,
     184,
     185,
     186,
     187,
     188,
     189,
     190,
     191,
     192,
     193,
     195,
     196,
     197,
     198,
     199,
     200,
     201,
     202,
     203,
     204,
     205,
     207,
     208,
     209,
     210,
     211,
     212,
     213,
     214,
     215,
     216,
     218,
     219,
     220,
     224,
     225,
     226,
     227,
     228,
     229,
     230,
     231,
     232,
     233,
     234,
     235,
     237,
     239,
     240,
     241,
     242,
     244,
     245,
     246,
     247,
     248,
     249,
     250,
     251,
     252,
     253,
     255,
     256,
     257,
     259,
     260,
     261,
     265,
     266,
     267,
     268,
     269,
     270,
     271,
     272,
     273,
     274,
     275,
     276,
     277,
     278,
     279,
     280,
     282,
     284,
     286,
     287,
     288,
     290,
     291,
     292,
     293,
     294,
     295,
     296,
     297,
     298,
     299
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/editor.c",
      "lines": "86-118",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor.c#L86-L118"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/editor.c",
      "lines": "508-546",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor.c#L508-L546"
     }
    ]
   },
   {
    "id": "slices",
    "trigger": "Editing saved sample slices",
    "paragraph": "After leaving SLICES with the synth transport stopped, changed slice markers can erase the unused tail of a valid, sufficiently short uploaded sample without a question or undo. See the switching advice in Before you switch firmware for the affected saved work.",
    "reader_objects": [
     "chord.sample_usr1",
     "chord.sample_usr2",
     "chord.sample_usr3"
    ],
    "foreign_rows": [
     159,
     160,
     161,
     167,
     169,
     179,
     181,
     193,
     204,
     205,
     213,
     218,
     219,
     220,
     224,
     226,
     228,
     231,
     237,
     239,
     242,
     252,
     253,
     259,
     260,
     261,
     269,
     280,
     282,
     284,
     286,
     288,
     292
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/slice_store.c",
      "lines": "71-105",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/slice_store.c#L71-L105"
     }
    ]
   },
   {
    "id": "startup",
    "trigger": "Conditional startup cleanup",
    "paragraph": "At startup, data where the firmware checks its update area can cause that whole temporary update area to be erased without a question; other stored bytes alone do not trigger this cleanup. See the switching advice in Before you switch firmware for the affected saved work.",
    "reader_objects": [
     "chord.update_staging",
     "chord.update_record"
    ],
    "foreign_rows": [
     301,
     302,
     303,
     304,
     305,
     306,
     307,
     308,
     309,
     310,
     311,
     312,
     313,
     314,
     315,
     316,
     317,
     318,
     319,
     320,
     321,
     322,
     323,
     324,
     325,
     326,
     327,
     328,
     329,
     330,
     331,
     332,
     333,
     334
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ota.c",
      "lines": "382-396",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ota.c#L382-L396"
     }
    ]
   },
   {
    "id": "installer",
    "trigger": "Installing or beginning an update",
    "paragraph": "The installer writes the program area, and beginning an update from fm1-chord can erase its temporary update area even when the package is rejected, without an on-unit question. See the switching advice in Before you switch firmware for the affected saved work. After installation, the loader erases only a sector that holds a valid update record; saved projects, sounds and samples are not erased by this cleanup.",
    "reader_objects": [
     "chord.update_staging",
     "chord.update_record"
    ],
    "foreign_rows": [
     301,
     302,
     303,
     304,
     305,
     306,
     307,
     308,
     309,
     310,
     311,
     312,
     313,
     314,
     315,
     316,
     317,
     318,
     319,
     320,
     321,
     322,
     323,
     324,
     325,
     326,
     327,
     328,
     329,
     330,
     331,
     332,
     333,
     334
    ],
    "extra_foreign_objects": [
     "mvaveopen.project_01",
     "mvaveopen.project_02",
     "mvaveopen.project_03",
     "mvaveopen.project_04",
     "mvaveopen.project_05",
     "mvaveopen.project_06",
     "mvaveopen.project_07",
     "mvaveopen.project_08",
     "mvaveopen.project_09",
     "mvaveopen.project_10",
     "mvaveopen.project_11",
     "mvaveopen.project_12",
     "mvaveopen.project_13",
     "mvaveopen.project_14",
     "mvaveopen.project_15",
     "mvaveopen.project_16",
     "mvaveopen.settings",
     "mvaveopen.staging",
     "mvaveopen.samples",
     "mvaveopen.factory_sample_write"
    ],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/loader/ldr_core.c",
      "lines": "80-135",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/loader/ldr_core.c#L80-L135"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/ota.c",
      "lines": "340-378",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ota.c#L340-L378"
     }
    ]
   },
   {
    "id": "installer_records",
    "trigger": "Installer cleanup only where an update record is recognized",
    "paragraph": "After installation, the loader erases only a sector that holds a valid update record; saved projects, sounds and samples are not erased by this cleanup.",
    "reader_objects": [],
    "foreign_rows": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/loader/ldr_core.c",
      "lines": "124-135",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/loader/ldr_core.c#L124-L135"
     }
    ]
   },
   {
    "id": "factory",
    "trigger": "Factory reset from startup or the console",
    "paragraph": "Holding HOME and SAVE through the startup countdown, or sending factory yes through the USB serial console, erases both copies of saved settings, all shared P1–P4/A–D projects, user-sound banks and the FM6 bank without undo; uploaded samples remain. See the switching advice in Before you switch firmware for the affected saved work.",
    "reader_objects": [
     "chord.settings",
     "chord.project_a",
     "chord.project_b",
     "chord.project_c",
     "chord.project_d",
     "chord.user_presets_1",
     "chord.user_presets_2",
     "chord.fm6_bank"
    ],
    "foreign_rows": [
     0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23,
     24,
     25,
     26,
     27,
     28,
     29,
     30,
     31,
     32,
     33,
     34,
     35,
     36,
     37,
     38,
     39,
     40,
     41,
     42,
     43,
     44,
     45,
     46,
     47,
     48,
     49,
     50,
     51,
     52,
     53,
     54,
     55,
     56,
     57,
     58,
     59,
     60,
     61,
     62,
     63,
     64,
     65,
     66,
     67,
     68,
     69,
     70,
     71,
     72,
     73,
     74,
     75,
     76,
     77,
     78,
     79,
     80,
     81,
     82,
     83,
     84,
     85,
     86,
     87,
     88,
     89,
     90,
     91,
     92,
     93,
     94,
     95,
     96,
     97,
     98,
     99,
     100,
     101,
     102,
     103,
     104,
     105,
     106,
     107,
     108,
     109,
     110,
     111,
     112,
     113,
     114,
     115,
     116,
     117,
     118,
     119,
     120,
     121,
     122,
     123,
     124,
     125,
     126,
     127,
     128,
     129,
     130,
     131,
     132,
     133,
     134,
     135,
     136,
     137,
     138,
     139,
     140,
     141,
     142,
     143,
     144,
     146,
     147,
     148,
     149,
     150,
     151,
     152,
     153,
     154,
     156,
     157
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "100-137",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L100-L137"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/main.c",
      "lines": "282-286",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L282-L286"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/storage.c",
      "lines": "121-133",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/storage.c#L121-L133"
     }
    ]
   },
   {
    "id": "restore",
    "trigger": "Restore through a working host or editor",
    "paragraph": "A working v0.3 editor route has not been established, but a compatible host can replace the settings, shared projects, sound banks, FM6 bank and samples included in a backup; the source browser editor asks once, then writes each included item, including empty slots, without an on-unit undo. See the switching advice in Before you switch firmware for the affected saved work. Interruption can leave a partial restore; a file without an FM6 bank leaves that bank unchanged, and the stored chord blocks retain their save faults.",
    "reader_objects": [
     "chord.settings",
     "chord.project_a",
     "chord.project_b",
     "chord.project_c",
     "chord.project_d",
     "chord.user_presets_1",
     "chord.user_presets_2",
     "chord.fm6_bank",
     "chord.sample_usr1",
     "chord.sample_usr2",
     "chord.sample_usr3"
    ],
    "foreign_rows": [
     0,
     1,
     2,
     3,
     4,
     5,
     6,
     7,
     8,
     9,
     10,
     11,
     12,
     13,
     14,
     15,
     16,
     17,
     18,
     19,
     20,
     21,
     22,
     23,
     24,
     25,
     26,
     27,
     28,
     29,
     30,
     31,
     32,
     33,
     34,
     35,
     36,
     37,
     38,
     39,
     40,
     41,
     42,
     43,
     44,
     45,
     46,
     47,
     48,
     49,
     50,
     51,
     52,
     53,
     54,
     55,
     56,
     57,
     58,
     59,
     60,
     61,
     62,
     63,
     64,
     65,
     66,
     67,
     68,
     69,
     70,
     71,
     72,
     73,
     74,
     75,
     76,
     77,
     78,
     79,
     80,
     81,
     82,
     83,
     84,
     85,
     86,
     87,
     88,
     89,
     90,
     91,
     92,
     93,
     94,
     95,
     96,
     97,
     98,
     99,
     100,
     101,
     102,
     103,
     104,
     105,
     106,
     107,
     108,
     109,
     110,
     111,
     112,
     113,
     114,
     115,
     116,
     117,
     118,
     119,
     120,
     121,
     122,
     123,
     124,
     125,
     126,
     127,
     128,
     129,
     130,
     131,
     132,
     133,
     134,
     135,
     136,
     137,
     138,
     139,
     140,
     141,
     142,
     143,
     144,
     146,
     147,
     148,
     149,
     150,
     151,
     152,
     153,
     154,
     156,
     157,
     159,
     160,
     161,
     165,
     166,
     167,
     168,
     169,
     170,
     171,
     172,
     173,
     174,
     175,
     176,
     177,
     178,
     179,
     181,
     183,
     184,
     185,
     186,
     187,
     188,
     189,
     190,
     191,
     192,
     193,
     195,
     196,
     197,
     198,
     199,
     200,
     201,
     202,
     203,
     204,
     205,
     207,
     208,
     209,
     210,
     211,
     212,
     213,
     214,
     215,
     216,
     218,
     219,
     220,
     224,
     225,
     226,
     227,
     228,
     229,
     230,
     231,
     232,
     233,
     234,
     235,
     237,
     239,
     240,
     241,
     242,
     244,
     245,
     246,
     247,
     248,
     249,
     250,
     251,
     252,
     253,
     255,
     256,
     257,
     259,
     260,
     261,
     265,
     266,
     267,
     268,
     269,
     270,
     271,
     272,
     273,
     274,
     275,
     276,
     277,
     278,
     279,
     280,
     282,
     284,
     286,
     287,
     288,
     290,
     291,
     292,
     293,
     294,
     295,
     296,
     297,
     298,
     299
    ],
    "extra_foreign_objects": [],
    "evidence": "inferred",
    "source": [
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "firmware/src/editor_backup.c",
      "lines": "85-147",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor_backup.c#L85-L147"
     },
     {
      "kind": "source",
      "repo": "math0ne/fm1-chord",
      "ref": "v0.3",
      "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
      "path": "web/fm1backup.js",
      "lines": "108-142",
      "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/fm1backup.js#L108-L142"
     }
    ]
   }
  ],
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Felucca cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D; FM6 patches of the FM6 user presets; user presets 1-16; user presets 17-32; user sample slot USR1; user sample slot USR2; user sample slot USR3. fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk when you act: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); the music in progress (autosave); user sounds U01-U16; user sounds U17-U32; user sample slot USR1; user sample slot USR2; user sample slot USR3. fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads break loops slot 1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads break loops slot 2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads break loops slot 3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration; break loops slot 1; break loops slot 2; break loops slot 3. fm1-chord reads break loops slot 1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads break loops slot 2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads break loops slot 3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, JIANT cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches for the FM6 user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, favourites, MENU options. At risk when you act: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project); FM6 patches for the FM6 user sounds; song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; user sounds U01-U16; user sounds U17-U32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, factory favourites, calibration, saved template. At risk when you act: shared user presets U289-U378 (partly lost); shared user presets U379-U384; shared user presets U109-U126; project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. At risk when you act: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved with a global save",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: options, playing setup and panel calibration. At risk when you act: 32 imported DX7 voices; CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last session saved with a global save; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, GHOULBOX cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches for user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank) [uses its preset bank]",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: project A; project B; project C; project D; FM6 patches for user sounds; user sounds 1–16; user sounds 17–32; user sample slot USR1; user sample slot USR2; user sample slot USR3. fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if the space where firmware updates are prepared, or the saved update progress at its end, has data at the start",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you start a firmware upgrade with the installer",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware writes over Open’s sixteen USER projects, preferences, the information needed to read its sample bank, and the start of its shared sample audio. Export projects and samples with Open before installing."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing this firmware writes over Open’s sixteen USER projects, preferences, the information needed to read its sample bank, and the start of its shared sample audio. Export projects and samples with Open before installing.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk when you act: older stored user bank, if present (Beta4 does not store new edits).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Hortator cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user samples USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user samples USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user samples USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: project A; project B; project C; project D; user samples USR1; user samples USR2; user samples USR3. fm1-chord reads user samples USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user samples USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user samples USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically at first start [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Polly setup and channel sounds. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 4; Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Optional QY70 style bank; Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Skiff cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank) [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank) [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank) [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank) [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: project A; project B; project C; project D; user sounds’ own FM6 patches; user sound bank 1 (changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered; other writes can also erase it); user sound bank 2 (changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered; other writes can also erase it); user sample USR1; user sample USR2; user sample USR3. fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
     },
     {
      "object": "user presets 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D; working loop; DX7 bank 1 voices 1–16; DX7 bank 1 voices 17–32; DX7 bank 2 voices 1–16; DX7 bank 2 voices 17–32; DX7 bank 3 voices 1–16; DX7 bank 3 voices 17–32; DX7 bank 4 voices 1–16; DX7 bank 4 voices 17–32; DX7 bank 5 voices 1–16; DX7 bank 5 voices 17–32; DX7 bank 6 voices 1–16; DX7 bank 6 voices 17–32; DX7 bank 7 voices 1–16; DX7 bank 7 voices 17–32; DX7 bank 8 voices 1–16; DX7 bank 8 voices 17–32; selected DX7 bank; MY KIT; user presets 1–16 (changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept; other writes can also erase it); user presets 17–32 (changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, Rainbow Mode cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "Project A: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project B: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project C: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project D: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the FM6 patches used by the thirty-two user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "your old FM6 bank (B1–B27)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase an FM6 bank patch from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank) [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank) [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
     },
     {
      "object": "user sounds U17–U32, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase an FM6 bank patch from the web editor (the computer asks first for that slot only; writes the whole bank) [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank) [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank) [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
     },
     {
      "object": "User sample USR1 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR2 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR3 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads and plays your old FM6 bank (B1–B27) before you write over it.",
     "fm1-chord reads user sample USR1 and any slice positions you set in SLICE until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 and any slice positions you set in SLICE until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR3 and any slice positions you set in SLICE until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes. At risk when you act: Project A: four tracks and their sounds, notes, automation, song chain and name; Project B: four tracks and their sounds, notes, automation, song chain and name; Project C: four tracks and their sounds, notes, automation, song chain and name; Project D: four tracks and their sounds, notes, automation, song chain and name; the FM6 patches used by the thirty-two user sounds; your old FM6 bank (B1–B27); user sounds U01–U16, names and sixteen-step patterns without automation (changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered; other writes can also erase it); user sounds U17–U32, names and sixteen-step patterns without automation (changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered; other writes can also erase it); User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE. fm1-chord reads and plays your old FM6 bank (B1–B27) before you write over it. fm1-chord reads user sample USR1 and any slice positions you set in SLICE until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 and any slice positions you set in SLICE until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR3 and any slice positions you set in SLICE until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "duell",
    "name": "DUELL beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M01–M02",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M03–M04",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M05–M06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M07–M08",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M09–M10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M11–M12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M13–M14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M15–M16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P01–P06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P07–P12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P13–P16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel setup. At risk when you act: multis M01–M02; multis M03–M04; multis M05–M06; multis M07–M08; saved patches; user wavetable USR1; user wavetable USR2; user wavetable USR3; multis M09–M10; multis M11–M12; multis M13–M14; multis M15–M16; patterns P01–P06; patterns P07–P12; patterns P13–P16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "maku",
    "name": "MAKU",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, MAKU cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "inherited project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "inherited user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads inherited user sample 1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads inherited user sample 2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads inherited user sample 3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings and calibration. At risk when you act: inherited project A; inherited project B; inherited project C; inherited project D; inherited FM6 patches for user presets; inherited user preset bank 1; inherited user preset bank 2; inherited user sample 1; inherited user sample 2; inherited user sample 3. fm1-chord reads inherited user sample 1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads inherited user sample 2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads inherited user sample 3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "learned button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: learned button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After fm1-chord replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching.",
     "fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; working loop; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2; user sample USR3. After fm1-chord replaces DX7 Banks’ saved settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking, including your own banks 5–8. Back up your DX banks before switching. fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FuMi-1 sound and playing setup. At risk when you act: FuMi-1 button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jangada",
    "name": "Jangada",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user samples USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user samples USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user samples USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; working music (autosave); user sounds U01-U16; user sounds U17-U32; user samples USR1; user samples USR2; user samples USR3. fm1-chord reads user samples USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user samples USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user samples USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, WaveLoop FM-1 cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "song 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved for the next start",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 patches and controls for each drum in user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song order and selection",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: song 1; song 2; song 3; last session saved for the next start; FM6 patches and controls for each drum in user sounds; slice positions you set for USR1; slice positions you set for USR2; song 4; song 5; song 6; song 7; song 8; song 9; song 10; song 11; song 12; song order and selection; user sounds 1–16; user sounds 17–32; user sample USR1; user sample USR2. fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "orbit",
    "name": "ORBIT",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "USER sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: saved section A (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section B (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section C (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section D (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); working music kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences. At risk when you act: USER sounds U01-U16 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); USER sounds U17-U32 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); sample slot USR1; sample slot USR2; sample slot USR3. fm1-chord reads sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the working loop kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, panel calibration and song order. At risk when you act: song section A; song section B; song section C; song section D; the working loop kept by autosave; user sounds U01–U16; user sounds U17–U32; user sample slot USR1; user sample slot USR2; user sample slot USR3. fm1-chord reads user sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "winampfm",
    "name": "winampFM Synth",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3. fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: sixteen six-track patterns (some or all lost); song order and four scenes (some or all lost); eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost); screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: screen preferences, calibration and favourites. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32; user sample USR1; user sample USR2; user sample USR3. fm1-chord reads user sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "changed to the new format: Once fm1-chord saves its settings, PIGEON cannot read the newer saved copy when you return. Shared preferences and panel calibration may use defaults"
       }
      ]
     },
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install fm1-chord",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the older FM6 patch bank PIGEON no longer uses",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     },
     {
      "object": "older FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions set by hand in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "older user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads the older FM6 patch bank PIGEON no longer uses until you write over the saved data.",
     "fm1-chord reads user sample USR1 in the older format until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR2 in the older format until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads user sample USR3 in the older format until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: preferences, MIDI LEARN and panel calibration. At risk when you act: shared song and drum sample bank; saved pattern A; saved pattern B; saved pattern C; saved pattern D; the older FM6 patch bank PIGEON no longer uses; older FM6 patches for user presets; slice positions set by hand in the older format; chops, drum-pad and performance edits; older user preset bank 1; older user preset bank 2; user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format. fm1-chord reads the older FM6 patch bank PIGEON no longer uses until you write over the saved data. fm1-chord reads user sample USR1 in the older format until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR2 in the older format until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads user sample USR3 in the older format until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1move",
    "name": "FM1 Move",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically at first start [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you calibrate the controls (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you change favourites or their filter (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you edit sample slice positions set by hand (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you perform factory reset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save a chord preset (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send preferences from the web editor (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16; user sounds U17–U32; sample slot USR1; sample slot USR2; sample slot USR3. fm1-chord reads sample slot USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample slot USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample slot USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Groove OS does not publish where it stores saved work or a format fm1-chord can import. Saved work may be lost when you switch, even if we cannot check which storage is shared. Before switching, on Groove OS’s Projects page, press back up the session, then export all. Project exports do not include samples. On Your own sounds, under Your FM-1, also use Save a backup. In your account, open Your FM-1 and use Save a safety copy to keep banks, songs, the last autosave and samples together on your computer. Keep these files before installing. Sound banks, samples, settings and other saved work may not survive."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Groove OS does not publish where it stores saved work or a format fm1-chord can import. Saved work may be lost when you switch, even if we cannot check which storage is shared. Before switching, on Groove OS’s Projects page, press back up the session, then export all. Project exports do not include samples. On Your own sounds, under Your FM-1, also use Save a backup. In your account, open Your FM-1 and use Save a safety copy to keep banks, songs, the last autosave and samples together on your computer. Keep these files before installing. Sound banks, samples, settings and other saved work may not survive.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "chord preset P1: full synth project",
     "chord preset P2: full synth project",
     "chord preset P3: full synth project",
     "chord preset P4: full synth project",
     "FM6 bank B1-B27",
     "uploaded sample USR1 and optional SLICE markers",
     "uploaded sample USR2 and optional SLICE markers",
     "uploaded sample USR3 and optional SLICE markers",
     "user sounds 1-16",
     "user sounds 17-32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "chord preset P1: full synth project",
     "chord preset P2: full synth project",
     "chord preset P3: full synth project",
     "chord preset P4: full synth project",
     "FM6 bank B1-B27",
     "uploaded sample USR1 and optional SLICE markers",
     "uploaded sample USR2 and optional SLICE markers",
     "uploaded sample USR3 and optional SLICE markers",
     "user sounds 1-16",
     "user sounds 17-32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you saved an FM6 bank in fm1-chord and no older bank of FM6 patches for your sounds from another firmware remains",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca may start with beta 2ND CORE ON or OFF after fm1-chord. Do not rely on your earlier choice: fm1-chord can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save.",
     "Felucca reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Felucca reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Felucca reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Felucca reads user sounds 1-16 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty.",
     "Felucca reads user sounds 17-32 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: FM6 bank B1-B27. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. Felucca may start with beta 2ND CORE ON or OFF after fm1-chord. Do not rely on your earlier choice: fm1-chord can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save. Felucca reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Felucca reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Felucca reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Felucca reads user sounds 1-16 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty. Felucca reads user sounds 17-32 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start an update or enter UPDATE MODE",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (fm1-chord’s own settings cannot trigger this update)",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. SLOOP reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed.",
     "X0X reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used."
    ],
    "owner_text": "At risk by itself: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 17-32; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: user sounds 1-16; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed. X0X reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds survives and the older 27-voice FM6 bank is present",
        "effect": "kept for Chord to use: JIANT copies only the patches your compatible FM6 user sounds use; the old bank stays until JIANT's next FM6 save"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept. CHORD sound slots look empty in JIANT. Saving into one replaces it without asking"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "JIANT copies only the patches your compatible FM6 user sounds use at first start. The old bank stays available to Chord until JIANT's next FM6 save."
    ],
    "owner_text": "At risk by itself: uploaded sample USR3 and optional SLICE markers; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: FM6 bank B1-B27. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; user sounds 1-16; user sounds 17-32. JIANT copies only the patches your compatible FM6 user sounds use at first start. The old bank stays available to Chord until JIANT's next FM6 save.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FM6 bank B1-B27; user sounds 1-16; user sounds 17-32; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR3 and optional SLICE markers. At risk when you act: uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup",
        "effect": "lost"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank (without asking)",
        "effect": "changed to the new format: Once ChoralRoot saves its FM6 bank, your previous firmware cannot read the new bank. It does not try the older saved copy just because the newest bank uses a different patch format. This applies only if the older 27-slot bank is still stored. A newer bank of FM6 patches in the same storage is separate and is not imported"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ChoralRoot reads user sounds 1-16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
     "ChoralRoot reads user sounds 17-32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from."
    ],
    "owner_text": "At risk by itself: uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; user sounds 1-16; user sounds 17-32. ChoralRoot reads user sounds 1-16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from. ChoralRoot reads user sounds 17-32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: Only patches used by compatible user sounds change to the new format. Later saves take turns writing over the old bank’s two saved copies with the new bank of FM6 patches for your sounds. Back up the old bank before switching"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Only patches used by compatible user sounds change to the new format. Later saves take turns writing over the old bank’s two saved copies with the new bank of FM6 patches for your sounds. Back up the old bank before switching"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Only patches used by compatible user sounds change to the new format. Later saves take turns writing over the old bank’s two saved copies with the new bank of FM6 patches for your sounds. Back up the old bank before switching"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Only patches used by compatible user sounds change to the new format. Later saves take turns writing over the old bank’s two saved copies with the new bank of FM6 patches for your sounds. Back up the old bank before switching"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (without asking)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (without asking)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (without asking)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you rename a project (without asking)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: The next project save stores the new format. Your previous firmware may then show the project as empty. It does not try an older saved copy just because it cannot read the newest project’s format. CHORD sounds use GHOULBOX’s GURDY engine, so the preset sounds different"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. CHORD sounds use GHOULBOX's GURDY engine, so they sound different"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX reads uploaded sample USR1 and optional SLICE markers until you write over the saved data.",
     "GHOULBOX reads uploaded sample USR2 and optional SLICE markers until you write over the saved data.",
     "GHOULBOX reads uploaded sample USR3 and optional SLICE markers until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. GHOULBOX reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. GHOULBOX reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. GHOULBOX reads uploaded sample USR3 and optional SLICE markers until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it."
    ],
    "owner_text": "At risk by itself: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27. At risk when you act: uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32; settings, panel calibration, four chord preset setups and the current chord setup. Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "uploaded sample USR1 and optional SLICE markers (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "uploaded sample USR2 and optional SLICE markers (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "uploaded sample USR3 and optional SLICE markers (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project. Carried over: uploaded sample USR1 and optional SLICE markers (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); uploaded sample USR2 and optional SLICE markers (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); uploaded sample USR3 and optional SLICE markers (Hortator uses its own one-shot sound engines, so saved loops and slices play differently).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start, can read an older project that needs a new format and there is room to save its patterns",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose RENAME in the web editor (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose SAVE AS in the web editor (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you rename a saved project (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start, can read an older project that needs a new format and there is room to save its patterns",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose RENAME in the web editor (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose SAVE AS in the web editor (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you rename a saved project (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start, can read an older project that needs a new format and there is room to save its patterns",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose RENAME in the web editor (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose SAVE AS in the web editor (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you rename a saved project (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start, can read an older project that needs a new format and there is room to save its patterns",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose RENAME in the web editor (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you choose SAVE AS in the web editor (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you rename a saved project (without asking)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "changed to the new format: Once Skiff writes the converted project, returning to the previous firmware cannot load that new project copy; its surviving older copy is not a backup guarantee. CHORD-engine tracks become DRUM-X tracks in Skiff; they do not keep their chord sound"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 patch bank is still stored and no current set of FM6 patches can be loaded",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Skiff reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. At risk by itself, under a condition: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27. At risk when you act: user sounds 1-16; user sounds 17-32. Skiff reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update or enter UPDATE MODE",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "sloopDX keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "sloopDX keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; uploaded sample USR2 and optional SLICE markers; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: uploaded sample USR1 and optional SLICE markers. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32. sloopDX keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. sloopDX keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer",
        "effect": "lost"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or a name from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you saved an FM6 bank in fm1-chord and no older bank of FM6 patches for your sounds from another firmware remains",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Rainbow Mode reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Rainbow Mode reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Rainbow Mode reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate.",
     "Rainbow Mode reads user sounds 1-16 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty.",
     "Rainbow Mode reads user sounds 17-32 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: FM6 bank B1-B27. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. Rainbow Mode reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Rainbow Mode reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Rainbow Mode reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Rainbow Mode reads user sounds 1-16 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty. Rainbow Mode reads user sounds 17-32 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change MIDI LEARN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you change preferences from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "maku",
    "name": "MAKU",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 bank is still stored and no valid set of FM6 patches for your sounds is stored",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: FM6 bank B1-B27. At risk when you act: settings, panel calibration, four chord preset setups and the current chord setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "At risk when you act: user sounds 1-16. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "SLOOP DX7 Banks keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. SLOOP DX7 Banks reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. SLOOP DX7 Banks keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. fm1-chord cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads uploaded sample USR1 and optional SLICE markers until you write over the saved data.",
     "Jangada reads uploaded sample USR2 and optional SLICE markers until you write over the saved data.",
     "Jangada reads uploaded sample USR3 and optional SLICE markers until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. Jangada reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Jangada reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Jangada reads uploaded sample USR3 and optional SLICE markers until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you saved an FM6 bank in fm1-chord and no older bank of FM6 patches for your sounds from another firmware remains",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 or DRUM user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       },
       {
        "way": "when you store the current FM6 or DRUM sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Later saves of user-sound patches can erase fm1-chord’s FM6 bank. When you return, fm1-chord cannot use patches saved in the new format. If a valid bank of FM6 patches for your sounds from another firmware remains, the older bank is not changed to the new format at start-up"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "WaveLoop FM-1 reads chord preset P1: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here.",
     "WaveLoop FM-1 reads chord preset P2: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here.",
     "WaveLoop FM-1 reads chord preset P3: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here.",
     "WaveLoop FM-1 reads chord preset P4: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here.",
     "WaveLoop FM-1 reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you.",
     "WaveLoop FM-1 reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you.",
     "WaveLoop FM-1 reads user sounds 1-16 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty.",
     "WaveLoop FM-1 reads user sounds 17-32 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: FM6 bank B1-B27; uploaded sample USR3 and optional SLICE markers; chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project. At risk when you act: uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; user sounds 1-16; user sounds 17-32. WaveLoop FM-1 reads chord preset P1: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here. WaveLoop FM-1 reads chord preset P2: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here. WaveLoop FM-1 reads chord preset P3: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here. WaveLoop FM-1 reads chord preset P4: full synth project until you write over the saved data. Playback uses this firmware’s instruments and control meanings. Saved music may sound different even if it opens. WaveLoop does not use the same check for allowed instruments. CHORD tracks do not use the CHORD instrument here. WaveLoop FM-1 reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you. WaveLoop FM-1 reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Only data in this sample slot is read. Other saved work is separate. Saved samples may have no slice positions set by you. WaveLoop FM-1 reads user sounds 1-16 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty. WaveLoop FM-1 reads user sounds 17-32 until you write over the saved data. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. The other firmware’s extra instrument is unavailable here. Its sounds appear empty.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "lost"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ORBIT reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project. At risk when you act: user sounds 1-16; user sounds 17-32; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. ORBIT reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [
     "user sounds 1-16 (Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound)",
     "user sounds 17-32 (Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound)"
    ],
    "notes": [
     "SLOOP Floyd FM reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. Kept but not shown: user sounds 1-16 (Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound); user sounds 17-32 (Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound). SLOOP Floyd FM reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project. At risk when you act: uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. winampFM Synth reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; user sounds 1-16; user sounds 17-32. At risk by itself, under a condition: uploaded sample USR3 and optional SLICE markers.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [
     "user sounds 1-16 (These sounds stay stored but cannot be shown or played. Saving replaces only the slot you save into. Back them up before using a slot that looks empty)",
     "user sounds 17-32 (These sounds stay stored but cannot be shown or played. Saving replaces only the slot you save into. Back them up before using a slot that looks empty)"
    ],
    "notes": [
     "Felucca [Salt] reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions.",
     "Felucca [Salt] reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions.",
     "Felucca [Salt] reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. Kept but not shown: user sounds 1-16 (These sounds stay stored but cannot be shown or played. Saving replaces only the slot you save into. Back them up before using a slot that looks empty); user sounds 17-32 (These sounds stay stored but cannot be shown or played. Saving replaces only the slot you save into. Back them up before using a slot that looks empty). Felucca [Salt] reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Felucca [Salt] reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Felucca [Salt] reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "PIGEON keeps stored but does not show FM6 bank B1-B27 until you write over the saved data. Kept but not shown, for backups. PIGEON does not play these synth patches.",
     "PIGEON reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio.",
     "PIGEON reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio.",
     "PIGEON reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio.",
     "PIGEON keeps stored but does not show user sounds 1-16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
     "PIGEON keeps stored but does not show user sounds 17-32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: uploaded sample USR1 and optional SLICE markers. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; FM6 bank B1-B27; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. PIGEON keeps stored but does not show FM6 bank B1-B27 until you write over the saved data. Kept but not shown, for backups. PIGEON does not play these synth patches. PIGEON reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio. PIGEON reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio. PIGEON reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. Only existing slice marks set by hand are read. This does not import a synth project or add missing sample audio. PIGEON keeps stored but does not show user sounds 1-16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them. PIGEON keeps stored but does not show user sounds 17-32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1move",
    "name": "FM1 Move",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: settings, panel calibration, four chord preset setups and the current chord setup; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. FM1 Move reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
     "FM1 Quest keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest keeps stored but does not show user sounds 1-16 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound. FM1 Quest keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "settings, panel calibration, four chord preset setups and the current chord setup",
     "chord preset P1: full synth project",
     "chord preset P2: full synth project",
     "chord preset P3: full synth project",
     "chord preset P4: full synth project",
     "user sounds 1-16",
     "user sounds 17-32",
     "FM6 bank B1-B27",
     "uploaded sample USR1 and optional SLICE markers",
     "uploaded sample USR2 and optional SLICE markers",
     "uploaded sample USR3 and optional SLICE markers"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): settings, panel calibration, four chord preset setups and the current chord setup; chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers. The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Live state after power-off",
   "docs_say": "The README says the settings return after power-off.",
   "source_says": "Boot unpacks the stored live chord state, then initializes the chord engine again, replacing sounds, effects, modes, inversions and locks with defaults; key, scale, octave and tempo also reset, and explicit P1–P4 saves have a separate fault that can damage the next preset’s chord settings.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "README.md",
    "lines": "29-31",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/README.md#L29-L31"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/main.c",
    "lines": "170-198",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L170-L198"
   },
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/main.c",
     "lines": "170-198",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L170-L198"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/main.c",
     "lines": "140-164",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/main.c#L140-L164"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "182-192",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L182-L192"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "274-296",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L274-L296"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-249",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L249"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    }
   ]
  },
  {
   "topic": "Sound count",
   "docs_say": "The README counts 37 sounds.",
   "source_says": "The release’s selectable sound table has 38 entries, including PURE SINE and ACOUSTIC GTR.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "README.md",
    "lines": "18-21",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/README.md#L18-L21"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/hui.c",
    "lines": "29-45",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L29-L45"
   },
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "29-45",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L29-L45"
    }
   ]
  },
  {
   "topic": "Modifier table count",
   "docs_say": "The README describes four modifier tables.",
   "source_says": "The KEY menu cycles five tables: DEFAULT, EXTEND, CHROM, BORROW and OG.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "README.md",
    "lines": "13-15",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/README.md#L13-L15"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/harmony.c",
    "lines": "56-61",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L56-L61"
   },
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/harmony.c",
     "lines": "56-61",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/harmony.c#L56-L61"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "498",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L498"
    }
   ]
  },
  {
   "topic": "Early specification controls",
   "docs_say": "The design notes propose held SEL/FX/EDIT gestures, direct SEQ mode selection, ENV/LFO cycling, and tap-to-load or hold-to-save presets.",
   "source_says": "The released chord interface uses menus and lists, SEQ opens LOOPER, SAVE opens PRESETS then saves on its next press, and OCT+ loads the selected slot; those held quick-selection gestures are not implemented.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "spec/docs/03-firmware-spec.md",
    "lines": "98-112",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/spec/docs/03-firmware-spec.md#L98-L112"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/hui.c",
    "lines": "710-772",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L710-L772"
   },
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "710-772",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L710-L772"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "790-823",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L790-L823"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "858-859",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L858-L859"
    }
   ]
  },
  {
   "topic": "Early key layout and key lights",
   "docs_say": "The design notes place the tonic on C4 and propose degree colors on the key lights.",
   "source_says": "The released DEGREE layout starts the chord degrees on F3, reserves F4–G5 for strumming in chord modes, and lights keys white for held or latched keys; the screen provides the degree colors.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "spec/docs/03-firmware-spec.md",
    "lines": "60-72",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/spec/docs/03-firmware-spec.md#L60-L72"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/chordmachine.c",
    "lines": "286-327",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L286-L327"
   },
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "286-327",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L286-L327"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "888-890",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L888-L890"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "1452-1488",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L1452-L1488"
    }
   ]
  },
  {
   "topic": "A held strumplate key during modifier changes",
   "docs_say": "The strumplate is described as one chord note per key.",
   "source_says": "A direction press or release, or an INVERT or LOCK press, marks sounding keys for rebuilding, and that rebuild does not exclude held plate keys, so a held plate note can become a chord based on its own key’s degree.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "README.md",
    "lines": "6-10",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/README.md#L6-L10"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/chordmachine.c",
    "lines": "530-564",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L530-L564"
   }
  },
  {
   "topic": "Locked chord roots follow the selected key",
   "docs_say": "The early specification says a chord lock keeps the key in which it was made.",
   "source_says": "A lock retains chord quality and a relative root shift; the chord root is still built from the current key and scale.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "spec/docs/03-firmware-spec.md",
    "lines": "88",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/spec/docs/03-firmware-spec.md#L88"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/chordmachine.c",
    "lines": "349-369",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L369"
   }
  },
  {
   "topic": "A held direction is applied twice immediately after locking",
   "docs_say": "The specification describes LOCK as retaining the changed chord.",
   "source_says": "LOCK stores the changed quality and root offset, then the current direction is applied again while still held; DEFAULT UP can flip a locked minor chord back to major until UP is released, and root shifts can be doubled.",
   "docs_ref": {
    "kind": "doc",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "spec/docs/03-firmware-spec.md",
    "lines": "88",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/spec/docs/03-firmware-spec.md#L88"
   },
   "source_ref": {
    "kind": "source",
    "repo": "math0ne/fm1-chord",
    "ref": "v0.3",
    "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
    "path": "firmware/src/chordmachine.c",
    "lines": "349-378",
    "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L349-L378"
   }
  }
 ],
 "not_mapped": [
  "Compatibility of saved v0.3 settings with v0.2 is not established; record important values and audio before changing version.",
  "The target memory neighbors beyond the preset array and autosave temporary buffer were not established; wider effects of their six-byte overruns are unknown.",
  "A working published or locally served v0.3 editor/backup route has not been established; editor and archive behavior here describes source capability only."
 ],
 "operational_notes": [
  {
   "topic": "Looper capacity",
   "text": "Each layer holds up to 160 note-on or note-off events; once full, recording silently leaves later events out.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "11-20",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L11-L20"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "43-50",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L43-L50"
    }
   ]
  },
  {
   "topic": "Looper lifetime",
   "text": "Chord looper recordings and chord sequencer steps live in working memory and are not part of P1–P4; record audio externally before switching off.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "21-39",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L21-L39"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "69-89",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L69-L89"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-248",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L248"
    }
   ]
  },
  {
   "topic": "Leaving the chord sequencer",
   "text": "Changing mode while the chord sequence runs records one pass into a looper layer only when no loop exists and the current live layer is off; otherwise the sequence stops.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hcseq.c",
     "lines": "237-251",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hcseq.c#L237-L251"
    }
   ]
  },
  {
   "topic": "Arming and finishing a loop",
   "text": "The first recording starts on the second short REC press, finishes on the next press in FREE length or after the chosen bar count, and later armed layers start at the loop boundary; playback moves the live instrument to the lowest unused layer.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "103-149",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L103-L149"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hclooper.c",
     "lines": "191-218",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hclooper.c#L191-L218"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "599-609",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L599-L609"
    }
   ]
  },
  {
   "topic": "Speaker save",
   "text": "Changing SPEAKER alone does not trigger chord-state autosave; a separate settings save, such as leaving the hidden synth menu, is needed to keep it.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "526",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L526"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-248",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L248"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "282-296",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L282-L296"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "304-316",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L304-L316"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui_menu.c",
     "lines": "248-250",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui_menu.c#L248-L250"
    }
   ]
  },
  {
   "topic": "Recalled output level",
   "text": "OUT LEVEL is not reliably saved or recalled because its value falls outside the chord-settings block; choosing its row applies the output reduction, while preset recall does not apply that reduction.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "527",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L527"
    }
   ]
  },
  {
   "topic": "MIDI input switch",
   "text": "MIDI IN changes the displayed choice but does not disable incoming MIDI notes, and its value lies outside the saved chord-settings block, so recall is unreliable.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "528",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L528"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/seq.c",
     "lines": "745-759",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/seq.c#L745-L759"
    }
   ]
  },
  {
   "topic": "OCT+ in the envelope or vibrato list",
   "text": "OCT+ unexpectedly loads P1 while the ENV or LFO list is open, replacing the active project and chord settings without a question or undo; use SELECT to choose within these lists.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "699-704",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L699-L704"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "765-772",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L765-L772"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "567-570",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L567-L570"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "83-103",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L83-L103"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "322-338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L322-L338"
    }
   ]
  },
  {
   "topic": "What stopped means for flash writes",
   "text": "The save guard waits for the hidden synth transport and song order, but does not check the chord sequencer or chord looper; flash erases can briefly silence audio while those run.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/ui.c",
     "lines": "157-166",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/ui.c#L157-L166"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/project.c",
     "lines": "934-965",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/project.c#L934-L965"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/storage_hw.c",
     "lines": "22-38",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/storage_hw.c#L22-L38"
    }
   ]
  },
  {
   "topic": "Backup contents",
   "text": "The editor source can read current synth music, stored chord-state blocks, shared A–D/P1–P4 projects, user-sound banks, the FM6 bank and three uploaded samples into a file; the blocks retain their save faults, edited slice markers and chord-sequence/looper recordings are excluded, and a working editor route has not been established.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/editor_backup.c",
     "lines": "8-69",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor_backup.c#L8-L69"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "web/fm1backup.js",
     "lines": "89-107",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/fm1backup.js#L89-L107"
    }
   ]
  },
  {
   "topic": "Restore consequences",
   "text": "If an editor is made operational and verified, its Restore backup asks once in the browser, then replaces included stored items, including empty slots, and loads the current synth project last without undo; interruption can leave a partial restore, and an older file without an FM6 bank leaves that bank unchanged.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/editor_backup.c",
     "lines": "85-147",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/editor_backup.c#L85-L147"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "web/fm1backup.js",
     "lines": "108-142",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/web/fm1backup.js#L108-L142"
    }
   ]
  },
  {
   "topic": "Preset-save fault",
   "text": "Saving P1 damages P2’s saved chord settings, P2 damages P3’s, and P3 damages P4’s, so loading the affected next preset can use default chord settings; there is no question or undo, and P4 also writes beyond its assigned working storage with effects that have not been established.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "304-338",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L304-L338"
    }
   ]
  },
  {
   "topic": "Autosave memory fault",
   "text": "The same chord-settings packer overruns its temporary working storage during autosave; the wider effects of this memory fault have not been established.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "233-266",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L233-L266"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/chordmachine.c",
     "lines": "78-99",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/chordmachine.c#L78-L99"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/settings_persist.c",
     "lines": "10-23",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/settings_persist.c#L10-L23"
    },
    {
     "kind": "source",
     "repo": "math0ne/fm1-chord",
     "ref": "v0.3",
     "commit": "377235d9f39a362e673f8fd60a26f0b1748218e7",
     "path": "firmware/src/hui.c",
     "lines": "282-296",
     "url": "https://github.com/math0ne/fm1-chord/blob/377235d9f39a362e673f8fd60a26f0b1748218e7/firmware/src/hui.c#L282-L296"
    }
   ]
  }
 ],
 "mapping_basis": "Source read at v0.3; nothing tested on a unit. Foreign loss warnings derive from this fragment’s write effects and supplied storage layouts; memory-overrun side effects and a usable editor route remain unestablished.",
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 preset-block overflow",
   "fixed": "Warned that P1/P2/P3 damage the following chord preset, P4 and live autosave overrun working storage, and preset/backup blocks are unreliable.",
   "at": "controls.button_save[1]; preset modes and loads; switching_note.kept_on_unit; operational_notes; chord.storage.json objects[0], firmware_notes; guide save section"
  },
  {
   "round": 1,
   "error": "2 shared preset/project slots",
   "fixed": "Named P1/A through P4/D in preset and project displays, save/load/name/overwrite entries and storage descriptions; synth saves replace the same music while leaving separate chord settings.",
   "at": "controls.button_save[1], screen[3], encoder_knob4[70], button_oct_up[68,79,82]; modes.presets; storage project_a-project_d; guide"
  },
  {
   "round": 1,
   "error": "4 MIDI/output outside block",
   "fixed": "Removed reliable-save/recall claims, documented the six out-of-block bytes, and corrected settings holds/load rules and firmware notes.",
   "at": "operational_notes Recalled output level and MIDI input switch; sound_menu_midi_in entries; chord.storage.json objects[0], firmware_notes[0,3]"
  },
  {
   "round": 1,
   "error": "5 unestablished editor route",
   "fixed": "Qualified editor and archive operations as source capability, removed unusable backup instructions, and advised written settings/audio capture.",
   "at": "switching_note.back_up_first, restore, going_back; controls.jack_usb_c[0,1,2]; operational_notes; storage editor triggers and firmware_notes[2]; guide"
  },
  {
   "round": 1,
   "error": "6 HOLD in DRONE",
   "fixed": "Said HOLD changes its indicator but adds no drone sustain and switching it off does not end the drone.",
   "at": "controls.key_as3[6]; guide black-key row"
  },
  {
   "round": 1,
   "error": "7 SLICES prerequisite",
   "fixed": "Required a selected SLICE-engine track before navigating to SLICES.",
   "at": "modes.synth_slices.how_to_get_there and source; guide SLICES section"
  },
  {
   "round": 1,
   "error": "8 key legend and header",
   "fixed": "Appended source-pinned screen entries for the at-rest legend and status/value header.",
   "at": "controls.screen[114,115]; guide display table"
  },
  {
   "round": 1,
   "error": "9 USB MIDI out",
   "fixed": "Appended USB output behavior, track channels and configured/queue-capacity conditions.",
   "at": "controls.jack_usb_c[3]; guide connection table"
  },
  {
   "round": 1,
   "error": "10 console factory reset",
   "fixed": "Appended factory yes, exact erased objects, retained samples, reboot and no further question/undo.",
   "at": "controls.jack_usb_c[4]; guide reset table and switching factory paragraph"
  },
  {
   "round": 1,
   "error": "3 G5 number naming",
   "fixed": "Corrected G5 to type + and removed the false naming disagreement.",
   "at": "controls.key_g5[64]; disagreements removed former[8]; guide naming row"
  },
  {
   "round": 1,
   "error": "11 CHRD HI key release",
   "fixed": "Qualified the common synth-key release entries to route CHRD HI modifiers instead of falsely releasing notes.",
   "at": "controls.key_fs4[31] and sibling synth_any key releases; guide common release row"
  },
  {
   "round": 1,
   "error": "12 list exits",
   "fixed": "Listed page-opening buttons that leave ENV/LFO lists and distinguished controls that keep them open.",
   "at": "controls.screen[5,6]; guide list sections"
  },
  {
   "round": 1,
   "error": "13 understated foreign settings losses",
   "fixed": "Built complete owner paragraphs from own destructive storage rows for settings/autosave/calibration, saves, banks, samples, startup and installer; named song orders, kits, templates, channel sounds and playing setups and included return-trip rejection.",
   "at": "switching_note.overwrites_before_atlas, trigger_precautions and overlap_precautions; guide Before you switch firmware"
  },
  {
   "round": 1,
   "error": "14 retained ChoralRoot sounds",
   "fixed": "Included all legacy ChoralRoot patches/sounds, including non-owner-marked retained migration records, in row-derived owner warnings and the existing overlap list.",
   "at": "switching_note.overlap_precautions and trigger_precautions for project, sound-bank, sample, installer and reset triggers; guide"
  },
  {
   "round": 1,
   "error": "15 footer short commit",
   "fixed": "Changed the guide footer to the seven-character commit while JSON citations retain the full pin.",
   "at": "control-maps/chord.md footer"
  },
  {
   "round": 2,
   "error": "1 complete list exits",
   "fixed": "Added ALGORITHM/PRESETS replacement by temporary mode/sound lists, their timeout, and HOME-hold entry to the synth interface.",
   "at": "controls.screen[5,6]; guide Envelope Presets and Vibrato Choices screen rows"
  },
  {
   "round": 2,
   "error": "2 legend follows key state",
   "fixed": "Replaced the sound-silence condition with held/latched-key and drawable-note conditions, explicitly allowing a released DRONE to keep ringing behind the legend.",
   "at": "controls.screen[114]; guide Chord home screen display row"
  },
  {
   "round": 2,
   "error": "3 preset mode intro consistency",
   "fixed": "Updated the PRESETS overview and section intro plus the P1–P4 section intros to match existing JSON slot-sharing and save-fault descriptions.",
   "at": "control-maps/chord.md modes table; PRESETS menu; PRESETS > P1, P2, P3, P4"
  },
  {
   "round": 2,
   "error": "4 display connection reset row placement",
   "fixed": "Moved KEY LEGEND and HEADER into the Chord home screen table and MIDI OUT and factory yes into Connections and startup, removing their misplaced table under shared-slot faults.",
   "at": "control-maps/chord.md Chord home screen and Connections and startup tables; Shared slots and preset-save faults"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.screen[9].short_label",
   "old": "CHORD",
   "new": "PLAY",
   "why": "firmware/src/hui.c:1403-1442@377235d9f39a362e673f8fd60a26f0b1748218e7"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.screen[15].short_label",
   "old": "CHORD STEPS",
   "new": "SEQUENCER",
   "why": "firmware/src/hui.c:1029-1051@377235d9f39a362e673f8fd60a26f0b1748218e7"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.screen[16].short_label",
   "old": "DRUM PADS",
   "new": "DRUM",
   "why": "firmware/src/hui.c:1054-1074@377235d9f39a362e673f8fd60a26f0b1748218e7"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.screen[17].short_label",
   "old": "DRUM LOOPS",
   "new": "DRUM LOOP",
   "why": "firmware/src/hui.c:1077-1099@377235d9f39a362e673f8fd60a26f0b1748218e7"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[89].short_label",
   "old": "UPDATE MODE",
   "new": "UPDATE 5s",
   "why": "firmware/src/main.c:242-268@377235d9f39a362e673f8fd60a26f0b1748218e7"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_up[54].short_label",
   "old": "RANDOM ALL",
   "new": "RAND ALL",
   "why": "firmware/src/hui.c:753-764@377235d9f39a362e673f8fd60a26f0b1748218e7"
  }
 ]
}